javascript - 【新手】关于nodejs服务端中客户端连接不上ETIMEDOUT问题
本文介绍了javascript - 【新手】关于nodejs服务端中客户端连接不上ETIMEDOUT问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
直接上代码
var server = http.listen(8888,function () {
var host = server.address().address
var port = server.address().port
console.log("welcome to http://%s:%s", host, port)
});
//连接到C服务器DataPort端口
function connectDPort(DataPort,IPaddr){
nodeServer.connect(DataPort, IPaddr, function() {
console.log('CONNECTED TO:',IPaddr,DataPort);
});
nodeServer.on('error',function(err){
console.error(err);
nodeServer.end();
})
};
//连接到C服务器CmdPort端口
function connectCPort(CmdPort,IPaddr){
client.connect(CmdPort, IPaddr, function() {
console.log('CONNECTED TO:',IPaddr,CmdPort);
});
}
// 同客户端建立连接
io.sockets.on('connection', function (socketIO) {
aSocket=socketIO;
// 测试用,连接成功
socketIO.emit("test","your websocket has connected");
//返回数据使用,控制C服务器
socketIO.on('fromWebClient', function (webClientData) {
console.log(webClientData);
var head=new Buffer([0xAA,0x01,0x11,0x11,0x11,0x11]);
var cmdData=new Buffer(webClientData);
var cmdControl=Buffer.concat([head,cmdData]);
console.log(cmdControl);
client.write(cmdControl);
});
socketIO.on('fromCmd',function(CmdData){
newIPaddr=CmdData.IPaddr;
newCmdPort=parseFloat(CmdData.CmdPort);
newDataPort=parseFloat(CmdData.DataPort);
console.log(newIPaddr);
console.log(newCmdPort);
console.log(newDataPort);
connectDPort(newDataPort,newIPaddr);
connectCPort(newCmdPort,newIPaddr);
})
});
代码有点长,截取的关键的部分,是这样,我想实现能够自由改ip和端口号。
io那里用了个socket.io,然后接收到网页发来的数据,连接端口。
但是现在就是直接ETIMEDOUT,应该怎么修改?
解决方案
代码给的有点少,你这个是两个应用的代码合在一起还是一个应用又做服务器又做客户端?一般比较少这样的。
没看到你代码中服务器部分有监听指定ip
你是指客户端链接错误IP时报错退出把?
你可以把连接服务器的代码放在一个函数里比如function connect(ip, port) {},然后监听错误:
client.on('error', (error) => {
console.error(error);
client.end();
connect(newIp, newPort);
});
如果出错,调用自身所在函数,传入新的IP和PORT就好了
这篇关于javascript - 【新手】关于nodejs服务端中客户端连接不上ETIMEDOUT问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文