客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据
问题描述:
客户端正在以1分钟的时间间隔向tcp服务器(ip:54.168.66.136,端口:8589)发送数据。我在此服务器上接收数据很好。现在我想要做的是,此tcp服务器必须将数据发送到另一个 服务器(ip:54.165.75.176,端口:8125)。我应该在代码中更改哪些内容?客户端向tcp服务器发送数据,tcp服务器向另一台服务器发送数据
//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.write(数据)你从没叫过client.end()
理想情况下,你不应该创建每次收到一个数据包时的连接。为什么不保持连接并继续转发数据包?我的建议是:
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);
+0
感谢亚尔终于解决了 –
+0
快乐帮助 :) – WinningAddicted
的https://stackoverflow.com/q/45636340/207421 – EJP
stackoverflow.com/q/45636340/207421问题完全重复的客户端编码 –