鍍金池/ 問(wèn)答/HTML/ Node創(chuàng)建TCP連接,服務(wù)器端口開(kāi)啟,但是本地向該端口發(fā)送數(shù)據(jù)報(bào)錯(cuò)。

Node創(chuàng)建TCP連接,服務(wù)器端口開(kāi)啟,但是本地向該端口發(fā)送數(shù)據(jù)報(bào)錯(cuò)。

node創(chuàng)建TCP連接,想要本地和服務(wù)器建立連接。服務(wù)器端口已經(jīng)正常開(kāi)啟,但是本地連接該端口失敗,報(bào)錯(cuò) 如下:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: connect ECONNREFUSED 111.231.137.44:6996
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1182:14)

服務(wù)器端代碼:

var net = require('net');

var HOST = '127.0.0.1';
var PORT = 6969;

// 創(chuàng)建一個(gè)TCP服務(wù)器實(shí)例,調(diào)用listen函數(shù)開(kāi)始監(jiān)聽(tīng)指定端口
// 傳入net.createServer()的回調(diào)函數(shù)將作為”connection“事件的處理函數(shù)
// 在每一個(gè)“connection”事件中,該回調(diào)函數(shù)接收到的socket對(duì)象是唯一的
net.createServer(function(sock) {

    // 我們獲得一個(gè)連接 - 該連接自動(dòng)關(guān)聯(lián)一個(gè)socket對(duì)象
    console.log('CONNECTED: ' +
        sock.remoteAddress + ':' + sock.remotePort);

    // 為這個(gè)socket實(shí)例添加一個(gè)"data"事件處理函數(shù)
    sock.on('data', function(data) {
        console.log('DATA ' + sock.remoteAddress + ': ' + data);
        // 回發(fā)該數(shù)據(jù),客戶(hù)端將收到來(lái)自服務(wù)端的數(shù)據(jù)
        sock.write('You said "' + data + '"');
    });

    // 為這個(gè)socket實(shí)例添加一個(gè)"close"事件處理函數(shù)
    sock.on('close', function(data) {
        console.log('CLOSED: ' +
            sock.remoteAddress + ' ' + sock.remotePort);
    });

    // console.log('Server listening on ' + HOST +':'+ PORT);

}).listen(PORT, HOST);

console.log('Server listening on ' + HOST +':'+ PORT);

本地代碼:

var net = require('net');

var HOST = '111.231.137.44';
// var HOST = '127.0.0.1'
var PORT = 6969;

var client = new net.Socket();
client.connect(PORT, HOST, function() {

    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
    // 建立連接后立即向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器將收到這些數(shù)據(jù) 
    client.write('I am Chuck Norris!');

});

// 為客戶(hù)端添加“data”事件處理函數(shù)
// data是服務(wù)器發(fā)回的數(shù)據(jù)
client.on('data', function(data) {

    console.log('DATA: ' + data);
    // 完全關(guān)閉連接
    client.destroy();

});

// 為客戶(hù)端添加“close”事件處理函數(shù)
client.on('close', function() {
    console.log('Connection closed');
});

百度看到一些解決方案,都是因?yàn)槎丝谡加玫膯?wèn)題,但是服務(wù)器端口能正常開(kāi)啟的,本地這是向該端口發(fā)送數(shù)據(jù),隨機(jī)分配本地端口號(hào),不存在端口占用的問(wèn)題吧?不是很明白。

回答
編輯回答
傲寒
var HOST = '111.231.137.44';
// var HOST = '127.0.0.1'

你請(qǐng)求的是并不是本地地址,這個(gè)遠(yuǎn)程地址又拒絕連接,所以導(dǎo)致報(bào)錯(cuò),而你的客戶(hù)端又沒(méi)有監(jiān)聽(tīng) error 事件,程序就會(huì)直接掛掉。另外關(guān)于端口,客戶(hù)端必須訪(fǎng)問(wèn)服務(wù)器監(jiān)聽(tīng)的端口才能傳輸數(shù)據(jù),不論是在本地還是遠(yuǎn)程。

2017年2月10日 12:49