Уважаемый All!
Вот тут мучил контрол
MSWinsock.Winsock (поставляется с
VB Ent. Edition) из
JScript (
WSH).
У него есть методы
GetData и
PeekData, которые принимают ссылку на
VARIANT.
HRESULT xxxData(
[in, out] VARIANT* data,
[in, optional] VARIANT type,
[in, optional] VARIANT maxLen);
Из
VBScript всё замечательно, а
JScript при передаче не изменяет переменную. Есть ли способ передать переменную на JScript, кроме написания своего переходника?
Если интересно, то код:
client.vbs:
dim bConnected
dim bSent
bConnected=false
bSent=false
dim bDataReceived
bDataReceived=false
dim winsock
Set winsock=WScript.CreateObject("MSWinsock.Winsock")
sub winsock_Connect
WScript.Echo "Connected!"
bConnected=true
end sub
sub winsock_SendComplete
WScript.Echo "Sent!"
bSent=true
end sub
sub winsock_DataArrival(bytTotal)
WScript.Echo "Received:"
WScript.Echo bytTotal
dim str
winsock.GetData str,8 ' Всё замечательно!
WScript.Echo str
bDataReceived=true
end sub
WScript.ConnectObject winsock,"winsock_"
winsock.Connect "127.0.0.1",6789
do while not (bConnected)
WScript.Sleep 500
Loop
winsock.SendData "Client request..."
do while not(bDataReceived)
WScript.Sleep 500
Loop
winsock.Close
server.js
var winsock=WScript.CreateObject("MSWinsock.Winsock");
var bClose=true;
function wsock_ConnectionRequest(reqId)
{
WScript.Echo("accepting request");
winsock.Close();
winsock.Accept(reqId);
}
function wsock_DataArrival(bytTotal)
{
WScript.Echo("Received:");
var data="";
WScript.Echo(bytTotal);
winsock.GetData(data,8,bytTotal);// {вырезано цензурой}
WScript.Echo(data);
winsock.SendData("Server response...");
}
function wsock_Error(number, desc, sCode, src, help, helpctx, cancelDisplay)
{
WScript.Echo("Error: "+desc);
bClose=false;
}
function wsock_Close()
{
WScript.Echo("Connection closed.");
bClose=false;
}
WScript.ConnectObject(winsock,"wsock_");
winsock.LocalPort=6789;
winsock.Protocol=0;
winsock.Listen();
while(bClose)WScript.Sleep(500);
client.js
var bConnected=false;
var bSent=false;
var bDataReceived=false;
var winsock=WScript.CreateObject("MSWinsock.Winsock");
function wsock_Connect()
{
WScript.Echo("Connected!");
bConnected=true;
}
function wsock_SendComplete()
{
WScript.Echo("Sent!");
bSent=true;
}
function wsock_DataArrival(bytTotal)
{
WScript.Echo("Received:");
WScript.Echo(bytTotal);
var str=null;
winsock.GetData(str,8);// {вырезано цензурой}
WScript.Echo(str);
bDataReceived=true;
}
WScript.ConnectObject(winsock,"wsock_");
winsock.Connect("127.0.0.1",6789);
while(!bConnected)WScript.Sleep(500);
winsock.SendData("This is message!");
// while(!bSent)WScript.Sleep(500);
while(!bDataReceived)WScript.Sleep(500);
winsock.Close();