Отправка подтверждения клиенту веб-сокетаC#

Место общения программистов C#
Ответить
Anonymous
 Отправка подтверждения клиенту веб-сокета

Сообщение Anonymous »

Я разрабатываю приложение C# со встроенным сервером веб-сокетов, подтверждение связи и получение данных от клиента выполняются и работают. Я хочу отправить подтверждение обратно клиенту, в конце кода получения у меня есть:

Код: Выделить всё

byte[] arybytAck = new byte[] { (byte)'a'
, (byte)'c'
, (byte)'k' };
stream.Write(arybytAck, 0, arybytAck.Length);
В моем клиентском JavaScript у меня есть:

Код: Выделить всё

webSocket.onmessage = (event) => {
DebugMsg("webSocket.onmessage"
+ ((typeof event == "object"
&& typeof event.data == "string") ? ":" + event.data : ""));
};
Я не вижу никакой активности в приведенном выше обработчике, может кто-нибудь помочь?
Вот тело тела принимающего потока:

Код: Выделить всё

        public void WebSocketServer() {
while (mblnRunTillStopped == true) {
try {
TcpClient tcpClient = mWebSocketServer.AcceptTcpClient();
if (tcpClient.Connected != true) {
continue;
}
Console.WriteLine(FrmMain.strTimeStampMsg("WebSocketServer(): client connected"));
NetworkStream stream = tcpClient.GetStream();
while (true) {
Thread.Sleep(mcintWebSocketServerThreadSleep);
if (mblnRunTillStopped != true) {
break;
}
if (stream.DataAvailable != true) {
continue;
}
IPEndPoint ipEndPoint = tcpClient.Client.RemoteEndPoint as IPEndPoint;
FrmMain.sobjThis.AddSubscriber(ipEndPoint.Address);
Byte[] arybytData = new byte[tcpClient.Available];
int intRxLength = stream.Read(arybytData, 0, arybytData.Length);
if (intRxLength == 0) {
break;
}
IPAddress ipClient = (tcpClient.Client.RemoteEndPoint as IPEndPoint).Address;
string strRX = Encoding.ASCII.GetString(arybytData);
FrmMain.sobjThis.UpdateClientStats(eRequest: eCounterState.INCREMENT);
if (Regex.IsMatch(strRX, "^GET") == true) {
WebSocketHandshake(arybytData, stream);
//First byte should be '129'
} else if (arybytData[0] == 0x81) {
//Is data masked?
bool blnFinished = ((arybytData[0] & 0x01) == 0x01);
bool blnMsgRecvd = ((arybytData[0] & 0x80) == 0x80);
byte bytMask = (byte)(arybytData[1] & 0x01);
ulong ulngMsgLength = (ulong)(arybytData[1] & 0x7f)
,ulngOffset = mcintWebSocketDataStartIdx;
if (ulngMsgLength == 0x7e) {
//Bytes are reverseved, websocket will print them in big-endian
ulngMsgLength = BitConverter.ToUInt16(new byte[] {
arybytData[3], arybytData[2]}, 0);
ulngOffset += 2;
} else if (ulngMsgLength == 0x7f) {
ulngMsgLength = BitConverter.ToUInt64(new byte[] {
arybytData[9], arybytData[8], arybytData[7]
,arybytData[6], arybytData[5], arybytData[4]
,arybytData[3], arybytData[2] }, 0);
ulngOffset += 8;
}
if (ulngMsgLength > 0 && bytMask > 0) {
byte[] arybytDecoded = new byte[ulngMsgLength];
byte[] arybytMasks = new byte[4] {arybytData[ulngOffset++]
,arybytData[ulngOffset++]
,arybytData[ulngOffset++]
,arybytData[ulngOffset++]};
for (ulong i=0; i WebSocketServer());
mWebSocketThread.Start();
} catch (Exception ex) {
FrmMain.UpdateTaskbar(ex.ToString());
}
Он прослушивает порт 443. То, что я реализовал на данный момент, основано на информации из:
https://developer.mozilla.org/en-US/docs/ Web/API/WebSockets_API/Writing_WebSocket_server
Изменен на порт 8080, все еще не работает.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ket-client
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»