2016-09-08 134 views
0

は(最後に)サーバーをNodeJS理由(それはそう)socket.end()netcat接続では、ECONNRESETサーバエラーを引き起こすのでしょうか?ノードのTCPサーバー・エラー・ECONNRESET

、クライアントとサーバー上のソケット・オブジェクトエラーを守ってください。

TERMINAL 1 
netcat localhost 9000 
Hello. 
Goodbye. 

TERMINAL 2 
==> A Connection connected 
==> The Server is disconnecting a connection 
{ [Error: read ECONNRESET] code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' } 

今、クライアントとサーバーにはソケットオブジェクトエラーを観察していない:

TERMINAL 1 
telnet localhost 9000 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
Hello. 
Goodbye. 
Connection closed by foreign host. 

TERMINAL 2 
==> A Connection connected 
==> The Server is disconnecting a connection 
==> A Connection disconnected 

私は答えを探していますエラーを修正するか、または失敗した場合、なぜこれがどうして起こらなければならないかを非常に明確に説明します。

多くのおかげで、
ジェイソン

import TCP from "net" 
import Promise from "Bluebird" 

const log = console.log 



const server = TCP.createServer((conn) => { 

    conn.setEncoding('utf8') 

    log("==> A Connection connected") 

    conn.write("Hello.\n", async function() { 
    await Promise.delay(3000) 
    if (!conn.destroyed) { 
     log("==> The Server is disconnecting a connection") 
     conn.end("Goodbye.\n") 
    } 
    }) 

    conn.on("error", log) 

    conn.on("end",() => { 
    log("==> A Connection disconnected") 
    }) 

    conn.on("data", (message) => { 
    log("==> A Connection says:\n%s", message) 
    }) 
}) 



const port = 9000 

server.listen(port,() => { 
    log(`==> The Server is listening on port ${port}`) 
}) 
+0

リンクありがとうございます。回答を得たい場合 - ここにあなたのコードを入れてください – baao

+0

@baao私はコードの上にコピーしました。ありがとう。 –

答えて

1

は、この理由は、netcatの一部のバージョン(すべてではないが)TCPコネクションの閉鎖を処理する方法とは何かを持っています。

正確な原因は、TCPの私の知識を超えたので、私はすべて私に言えることは、ECONNRESETノードがnetcatによって既に閉じ/リセットされた接続から読み取るしようとしたことを意味していることである(それのお手伝いをすることはできません)。私はそれが実行からのノードを提示推測

conn.end("Goodbye.\n") 
conn.destroy() 

任意のより多くのエラーを引き起こす可能性があり、ソケット上で読み取ります

私の作品解決策は、最後のメッセージが送信された後、ソケットにdestroy()を呼び出すことです。

+0

詳細な回答を受け入れるのを待つつもりですが、これは有益なスタートですので、ありがとうございます! –

関連する問題