Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 带有node.js的WebSocket-“;“垃圾”;数据包捕获和套接字重置_Windows_Node.js_Network Programming_Websocket_Network Protocols - Fatal编程技术网

Windows 带有node.js的WebSocket-“;“垃圾”;数据包捕获和套接字重置

Windows 带有node.js的WebSocket-“;“垃圾”;数据包捕获和套接字重置,windows,node.js,network-programming,websocket,network-protocols,Windows,Node.js,Network Programming,Websocket,Network Protocols,最近我在使用WebSocket时遇到了很多问题。我知道如何使用它们,而且我以前也成功地使用过它们,但无论如何,应该起作用的东西都不起作用。我在Windows7上使用node.js v0.10.26。我尝试过各种方法(请参见此处),但现在我只想关注我正在使用“websocket”(websocket)创建的服务器。这是服务器: var ws = require('websocket').server var http = require('http') var server = http.cre

最近我在使用WebSocket时遇到了很多问题。我知道如何使用它们,而且我以前也成功地使用过它们,但无论如何,应该起作用的东西都不起作用。我在Windows7上使用node.js v0.10.26。我尝试过各种方法(请参见此处),但现在我只想关注我正在使用“websocket”(websocket)创建的服务器。这是服务器:

var ws = require('websocket').server
var http = require('http')

var server = http.createServer(function(request, response) {
    console.log("connection received for "+request.url)
    response.writeHead(404)
    response.end()  
})
server.listen(8080, function() {
    console.log("now listening")    
})

wsServer = new ws({httpServer:server, autoAcceptConnections: false})

wsServer.on('request', function(request) {
    console.log("got request")
    var connection = request.accept('a', request.origin)
    console.log("got connection")

    connection.on('message', function(message) {
        console.log("got message: "+message)
    })      

    connection.on("close", function() {
        console.log("closed")   
    })

    connection.on('error', function(e) {
        console.log('Error: '+ e.stack)
    })
})
客户:

var ws = require('websocket').client

client = new ws

client.on('connectFailed', function(error) {
    console.log('Connect Error: ' + error.toString());
});

client.on('connect', function(connection) {
    console.log('WebSocket client connected')

    connection.on('error', function(error) {
        console.log("Connection Error: " + error.toString());
    });
    connection.on('close', function() {
        console.log('Connection Closed');
    });
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log("Received: '" + message.utf8Data + "'");
        } else {
            console.log("Received: '" + message + "'");
        }
    });

    connection.sendUTF("test sending");
});

client.connect('ws://localhost:8080/', 'a');
<script>

var ws = new WebSocket('ws://localhost:8080/', 'a')
ws.onopen = function() {
    console.log('WebSocket client connected')   
    ws.send('testing')
}

ws.onerror = function(e) {
    console.log(e)  
}

ws.onmessage = function(m) {
    console.log(m.data)
}   

ws.onclose = function() {
    console.log('Connection Closed')   
}

</script>
服务器输出:

now listening
got request
got connection
Error: Error: read ECONNRESET
    at errnoException (net.js:904:11)
    at TCP.onread (net.js:558:19)
closed
客户端输出:

WebSocket client connected
Connection Closed
Rawcap输出:

¡²ÃÔ            ÿÿ   eS:Üm 
’Ø   4   4E  4â@ €      Ášáª    €  J4  ÿ×S:Üm 
–À   4   4E  4ã@ €      Áš÷“Sá«€  ¿¾  ÿ×S:Üm 
–À   (   (E  (ä@ €      Ášá«÷“TP  –  S:Üm 
ªH   Ü   ÜE  Üå@ €      Ášá«÷“TP  ±   GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: 6ilNFU9aUzOnlvL8+QUcVQ==
Host: localhost:8080
Sec-WebSocket-Protocol: a

S:Üm 
ªH   (   (E  (æ@ €      Áš÷“Tá_P ã  S:Üm 
ɉ   Ä   ÄE  Äç@ €      Áš÷“Tá_P }  HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: cgLNQgJeCA0LXM2p8Mw2TMVq8Pc=
Sec-WebSocket-Protocol: a

S:Üm 
ɉ   (   (E  (è@ €      Ášá_÷“ðP G  S:Üm 
àù   (   (E  (é@ €      Ášá_÷“ñP F  S:Üm 
àù   (   (E  (ê@ €      Ášá_÷“ñP E  S:Üm 
äá   (   (E  (ë@ €      Ášá`÷“ñP  `  S:Üm 
äá   (   (E  (ì@ €      Áš÷“ðá_P G  S:Üm 
äá   (   (E  (í@ €      Ášá_á_P  x3  
我并不总是遇到“EconReset”错误——这似乎只是偶尔发生。其他时候,在连接和关闭之间大约有15到20秒没有任何事情发生。对我来说,rawcap输出看起来真的很可疑——里面有很多看起来像垃圾的东西。我在环回接口上看到的唯一其他流量是一些upnp的东西,但这些垃圾看起来与upnp无关

我还在chrome 33.0.1750.149 m上与客户端的浏览器websocket会话中尝试了这一点:

var ws = require('websocket').client

client = new ws

client.on('connectFailed', function(error) {
    console.log('Connect Error: ' + error.toString());
});

client.on('connect', function(connection) {
    console.log('WebSocket client connected')

    connection.on('error', function(error) {
        console.log("Connection Error: " + error.toString());
    });
    connection.on('close', function() {
        console.log('Connection Closed');
    });
    connection.on('message', function(message) {
        if (message.type === 'utf8') {
            console.log("Received: '" + message.utf8Data + "'");
        } else {
            console.log("Received: '" + message + "'");
        }
    });

    connection.sendUTF("test sending");
});

client.connect('ws://localhost:8080/', 'a');
<script>

var ws = new WebSocket('ws://localhost:8080/', 'a')
ws.onopen = function() {
    console.log('WebSocket client connected')   
    ws.send('testing')
}

ws.onerror = function(e) {
    console.log(e)  
}

ws.onmessage = function(m) {
    console.log(m.data)
}   

ws.onclose = function() {
    console.log('Connection Closed')   
}

</script>

var ws=new-WebSocket('ws://localhost:8080/','a')
ws.onopen=函数(){
console.log('WebSocket客户端已连接')
ws.send('测试')
}
ws.onerror=函数(e){
控制台日志(e)
}
ws.onmessage=函数(m){
console.log(m.data)
}   
ws.onclose=function(){
console.log('连接已关闭')
}
客户端和服务器的输出完全相同

浏览器会话的Rawcap输出:

¡²ÃÔ            ÿÿ   eS:Üô 
¡b   4   4E  46@ €      ÁÇ€`gæ    €  K  ÿ×S:Üô 
©2   4   4E  47@ €      ÁÇÁK:˜€`gç€  ‘V  ÿ×S:Üô 
­   (   (E  (8@ €      ÁÇ€`gçÁK:™P  ì-  S:Üô 
´ê  î  îE î9@ €      ÁÇ€`gçÁK:™P  v»  GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:8080
Origin: null
Sec-WebSocket-Protocol: a
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: BkPvYoibS9i+g79JBOnVFQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits, x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36

S:Üô 
´ê   (   (E  (:@ €      ÁÇÁK:™€`i­P êi  S:Üô c   Ò   ÒE  Ò;@ €      ÁÇÁK:™€`i­P [  HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: hXGSMoUCji4jazy7i4z/FlQ+utk=
Sec-WebSocket-Protocol: a
Origin: null

S:Üô c   (   (E  (<@ €      ÁÇ€`i­ÁK;CP é¾  S:Üô *   (   (E  (=@ €      ÁÇ€`i­ÁK;DP é½  S:Üô *   (   (E  (>@ €      ÁÇ€`i­ÁK;DP é¼  S:Üô *   (   (E  (?@ €      ÁÇ€`i®ÁK;DP  é×  S:Üô *   (   (E  (@@ €      ÁÇÁK;C€`i­P é¿  S:Üô *   (   (E  (A@ €      ÁÇ€`i­€`i­P  üj  
(代码):
b 4 4 E 46欧元Áææ欧元Kÿx S:
©2 4 4 E 47欧元:gç€Vÿx S:
…((E)8欧元Á!'gÁK:™Pì-S:
"EîEî9"gçK:™P v»GET/HTTP/1.1
升级:websocket
连接:升级
主机:本地主机:8080
来源:空
Sec WebSocket协议:a
Pragma:没有缓存
缓存控制:没有缓存
Sec WebSocket键:BkPvYoibS9i+g79JBOnVFQ==
Sec WebSocket版本:13
Sec WebSocket扩展:permessage deflate;客户端最大窗口位,x-webkit-deflate-frame
用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/33.0.1750.149 Safari/537.36
S:ÜÜÜ
"(E:"K):™欧元'i-Pêi S:iÜÒcÒEÒ;@ÁK:™Eur` i-P[HTTP/1.1 101交换协议
升级:websocket
连接:升级
Sec网箱验收:HXGSMOUCHI4JAZY7I4Z/FlQ+utk=
Sec WebSocket协议:a
来源:空
S:iÁK;DPêS:iê*((EÁKêiêK;DPéx S:iê*)
有人知道rawcap输出是否表明我的机器或安装的东西有问题吗?rawcap输出看起来正确吗?有人见过类似的情况吗?请注意,node.js客户端到node.js服务器在同一台机器上的我的centos vagrant实例中工作正常