Ich konnte meinen JavaScript-Client mit C++ - Server verbinden (ich verwende Winsock), und der Server empfängt einen HTTP-Header, aber ich kann danach nichts mehr senden oder empfangen. Der Server sendet die Nachricht (send gibt die Anzahl der gesendeten Bytes zurück), aber nichts kommt auf dem Client an.Verbinden Sie JavaScript WebSocket mit C Winsock
Auftraggeber: JavaScript
function WebSocketTest()
{
if ("WebSocket" in window)
{
var ws = new WebSocket("ws://192.168.43.205:80");
ws.onopen = function()
{
ws.send("Message to send");//this doesn't work
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert("Message is received...");
document.getElementById("message").innerHTML += received_msg;
};
ws.onclose = function()
{
alert("Connection is closed...");
};
ws.onerror = function(error){
alert('Error detected: ' + error);
}
}
else
{
// The browser doesn't support WebSocket
alert("WebSocket NOT supported by your Browser!");
}
}
Server: C/C++
#include <stdio.h>
#include "winsock2.h"
#include <iostream>
#include <string>
#pragma comment(lib, "Ws2_32.lib")
#define _WINSOCK_DEPRECATED_NO_WARNINGS
using namespace std;
void main() {
int size;
char buffer[1024];
WSADATA wsaData;
sockaddr_in service;
SOCKET ListenSocket, AcceptSocket;
service.sin_family = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port = htons(10011);
WSAStartup(MAKEWORD(2, 2), &wsaData);
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
bind(ListenSocket, (SOCKADDR*)&service, sizeof(service));
listen(ListenSocket, SOMAXCONN);
AcceptSocket = accept(ListenSocket, NULL, NULL);
cout << "Client connected.\n";
size = recv(AcceptSocket, buffer, 1024, 0);
string msg(buffer, size);
/*
msg contains this:
GET/HTTP/1.1
Host: 172.16.199.150:10011
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,hu;q=0.6
Sec-WebSocket-Key: 34qTtPYjnRJheHKQowePRg==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
*/
string abc = "abc";
auto cmsg = abc.c_str();
size = send(AcceptSocket, cmsg, abc.size(), 0);
// size == 3, which means send was successful, but client doesn't receive anything
// hangs here, even tho client sent a message
size = recv(AcceptSocket, buffer, 1024, 0);
}
Können wir Ihren Code für alle verwandten Teile sehen? – mike510a
Wir können nicht mit dieser Menge an Informationen fortfahren. Sie könnten genauer sein und uns mehr Beweise und Details liefern. –
Eine WebSocket-Verbindung verwendet ein ganzes Verbindungsschema und ein eigenes Datenformat (z. B. ein eigenes Protokoll). Um webSocket-Verbindungen zu erhalten, müssen Sie das gesamte webSocket-Protokoll unterstützen. Da es viele vorgefertigte Implementierungen für viele Sprachen gibt, werden die meisten Benutzer eine vorhandene webSocket Serverimplementierung erhalten und verwenden, anstatt sie von Grund auf neu zu schreiben. In diesem Artikel finden Sie eine Übersicht über die Anforderungen von [Schreiben von webSocket-Servern] (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers). – jfriend00