Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Node.js 客户端将数据发送到tcp服务器,tcp服务器将数据发送到另一台服务器_Node.js_Sockets_Tcp - Fatal编程技术网

Node.js 客户端将数据发送到tcp服务器,tcp服务器将数据发送到另一台服务器

Node.js 客户端将数据发送到tcp服务器,tcp服务器将数据发送到另一台服务器,node.js,sockets,tcp,Node.js,Sockets,Tcp,客户端正在以1分钟的间隔向tcp服务器(ip:54.168.66.136,端口:8589)发送数据。我正在接收此服务器上的数据。现在我想做的是,这个tcp服务器必须向另一个服务器发送数据 服务器(ip:54.165.75.176,端口:8125)。我应该在代码中更改什么 //tcpserver.js code is below net = require('net'); var http = require('http'); var moment = require('moment'); var

客户端正在以1分钟的间隔向tcp服务器(ip:54.168.66.136,端口:8589)发送数据。我正在接收此服务器上的数据。现在我想做的是,这个tcp服务器必须向另一个服务器发送数据 服务器(ip:54.165.75.176,端口:8125)。我应该在代码中更改什么

//tcpserver.js code is below
net = require('net');
var http = require('http');
var moment = require('moment');
var fs = require('fs');
var clients = [];
var client = new net.Socket();
var querystring = require('querystring');
net.createServer(function (socket) {
clients.push(socket);
socket.connected_state = "IGN_ON";
socket.on('data', function (data) {

try {
    data =""+data;
    client.connect(8125, '54.165.75.176', function() {
            client.write(data);
    });
    /*client.on('close', function() {
   // console.log('Connection closed');
    });*/
   }catch (err) {
   }
   });
    socket.on('end', function () {
                    clients.splice(clients.indexOf(socket), 1);
    });

}).listen(8589);

这里的问题是,每次收到数据缓冲区时,都会尝试创建连接。因此,当您收到第一个数据包时,数据包将被转发。当第二个数据包被命中时,真正的问题就来了。它尝试再次创建与服务器的连接,但该连接已存在。您从未在之后调用client.end()

client.write(数据)

理想情况下,您不应该在每次收到数据包时都创建连接。为什么不保持连接并继续转发数据包?我的建议是:

net = require('net');
var http = require('http');
var moment = require('moment');
var fs = require('fs');
var clients = [];
var client = new net.Socket();
var querystring = require('querystring');

client.connect(8125, '54.165.75.176', function() {
                console.log('Connected to Server: 54.165.75.176');
        });

net.createServer(function (socket) {
    clients.push(socket);
    socket.connected_state = "IGN_ON";
    socket.on('data', function (data) {

        try {
            data =""+data;
            client.write(data);
            /*client.on('close', function() {
           // console.log('Connection closed');
           });*/
       }

       catch (err) {
       }
    });

    socket.on('end', function () {
        clients.splice(clients.indexOf(socket), 1);
    });
}).listen(8589);

stackoverflow.com/q/45636340/207421的准确副本问题是客户端代码帮助:)