备注:我发现的最接近于的问题是这一个,但答案是通过一个等待readyState为1的代理函数发送数据。虽然标题非常相似,但这并不是这个问题的重复;我知道我的问题在于我的服务器没有将数据传回客户端,但我不知道该传递什么。
详细信息:
我在服务器程序中将一个TCP侦听器定义为New TcpListener(ipAd, 8001),并以New TcpClient()的形式编写了一个客户端程序以连接到服务器。这些程序按预期工作,一旦连接完成,客户端就可以将数据发送到服务器。
在完成客户端和服务器之后,我开始在web接口上充当客户端,这样我就可以从任何设备向套接字发送数据。以下是websocket的javascript代码:
console.log("Attempting to connect...");
ws = new WebSocket('ws://192.168.0.10:8001/');
ws.onopen = function(msg) {
console.log('Connection successfully opened');
};
ws.onmessage = function(msg) {
console.log(msg);
};
ws.onclose = function(msg) {
console.log("Closed.");
}
ws.error = function(err){
console.log(err);
}当我加载网页时,我在服务器控制台应用程序中看到连接已经建立。这是输出:
GET / HTTP/1.1
Host: 192.168.0.10:8001
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-
cache
Upgrade: websocket
Origin: null
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows
NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Accept-Enc
oding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Sec-WebSocket-Key: key_here
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits因此,headers显然是发送和接收的;但是,我的服务器(当前)没有向客户端发送任何内容,所以当我试图从websocket发出ws.send("test");时,在控制台中会收到一个错误:
Uncaught InvalidStateError: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.我的问题:,我需要从服务器向客户端发送什么才能完成握手,这样我就可以用ws.send();发送数据。
发布于 2015-02-04 17:16:07
您需要实现webSocket的服务器端(或者使用为您提供的webSocket库)。这是VB中的一个示例实现。和与样例代码类似的问题。
webSocket连接的工作方式如下:
例如,请参阅这篇文章响应和webSocket数据帧格式的说明。
此外,默认情况下,浏览器强制执行相同的源限制,因此,如果您试图从浏览器连接到与Javascript所在的网页不同的来源,那么您将需要来自服务器的适当的CORS头来启用跨源连接。
下面是一个示例连接:
客户端发送以下内容:
GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13服务器响应如下:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=然后,数据帧如下所示:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+当然,webSocket RFC官方规范是这里。
https://stackoverflow.com/questions/28327119
复制相似问题