Тема: JScript: Метод GetData в WinSock Control
Здравствуйте, товарищи.
Потребовалось реализовать межпроцессное взаимодействие с помощью сокетов. Используется компонент MSWinsock.Winsock. Обнаружил на форуме несколько примеров на VBscript. Переписал на JScript
Server.js
var Winsock = new ActiveXObject("MSWinsock.Winsock")
var bClose = true
function Winsock_ConnectionRequest(reqId)
{
Winsock.Close()
Winsock.Accept(reqId)
}
function Winsock_DataArrival(bytTotal)
{
var Data
Data = ""
Winsock.GetData(Data,8,bytTotal)
WScript.Echo("[Сервер] Получено: "+Data)
Winsock.SendData("Привет от сервера :) ")
}
function Winsock_Error(number, desc, sCode, src, help, helpctx, cancelDisplay)
{
WScript.Echo("[Сервер] Ошибка: "+desc)
bClose = false
}
function Winsock_Close()
{
WScript.Echo("Соединение закрыто.")
bClose=false
}
WScript.ConnectObject(Winsock,"Winsock_")
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= new ActiveXObject("MSWinsock.Winsock")
function Winsock_Connect()
{
bConnected=true
}
function Winsock_SendComplete()
{
bSent=true
}
function Winsock_DataArrival(bytTotal)
{
var str
Winsock.GetData(str)
WScript.Echo("[Клиент] Получено: " + str)
bDataReceived=true
}
WScript.ConnectObject(Winsock,"Winsock_")
Winsock.Connect("127.0.0.1",6789)
while (!bConnected)
{
WScript.Sleep(500)
}
Winsock.SendData("Привет, сервер!")
while(!bDataReceived)
{
WScript.Sleep (500)
}
Winsock.Close()При запуске Server.vbs + Client.js получаю последовательность сообщений: "[Сервер] Получено: Привет, сервер!" - "[Клиент] Получено: undefined" - "Соединение закрыто."
При запуске Server.js + Client.vbs: "[Сервер] Получено: " - "[Клиент] Получено: Привет от сервера
" - "Соединение закрыто."
При запуске Server.js + Client.js: "[Сервер] Получено: " - "[Клиент] Получено: undefined" - "Соединение закрыто."
По сему видно, что в коде JScript метод GetData отрабатывает некорректно (содержимое буфера сокета не присваивается переменной)
Посмотрел здесь, поколдовал с параметром type, но эффекта это не дало.
Код на VBScript был взят здесь
Сведущие граждане, помогите разобраться, пожалуйста.

