素材牛VIP会员
【新手】关于nodejs服务端中客户端连接不上ETIMEDOUT问题
 13***64  分类:Node.js  人气:801  回帖:1  发布于6年前 收藏

直接上代码

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,应该怎么修改?

 标签:node.jsjavascript

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv4 码徒
小***学 软件测试工程师 6年前#1

代码给的有点少,你这个是两个应用的代码合在一起还是一个应用又做服务器又做客户端?一般比较少这样的。
没看到你代码中服务器部分有监听指定ip
你是指客户端链接错误IP时报错退出把?
你可以把连接服务器的代码放在一个函数里比如function connect(ip, port) {},然后监听错误:

client.on('error', (error) => {
  console.error(error);
  client.end();
  connect(newIp, newPort);
});

如果出错,调用自身所在函数,传入新的IP和PORT就好了

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取