Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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 nodejs服务器未接收来自客户端的响应_Node.js_Tcp_Tcpserver - Fatal编程技术网

Node.js nodejs服务器未接收来自客户端的响应

Node.js nodejs服务器未接收来自客户端的响应,node.js,tcp,tcpserver,Node.js,Tcp,Tcpserver,我是新来的。我有一个从客户端接收命令的服务器。它向服务器发送一个名为TIME的命令。然后服务器必须向客户端发送当前时间戳。一旦客户端从服务器接收到时间戳,第一个客户端就会发送另一个命令 我不知道我做错了什么。我收到TIME命令,但当服务器向客户机发送当前时间戳时,它不会收到客户机的响应。这可能是客户的问题。我想知道下面写的代码是否正确 var net = require("net"); net.createServer(function(socket) { console.log('C

我是新来的。我有一个从客户端接收命令的服务器。它向服务器发送一个名为TIME的命令。然后服务器必须向客户端发送当前时间戳。一旦客户端从服务器接收到时间戳,第一个客户端就会发送另一个命令

我不知道我做错了什么。我收到TIME命令,但当服务器向客户机发送当前时间戳时,它不会收到客户机的响应。这可能是客户的问题。我想知道下面写的代码是否正确

var net = require("net");

net.createServer(function(socket) {
    console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);
    socket.on('data', function(data) {
        var tmp = data.toString('utf8');
        var d = new Date();
        if (tmp.substr(0, 4) == "TIME"){
           console.log(buffer.toString('utf8'));
           var ts = Math.round((new Date()).getTime() / 1000);
           socket.write(ts.toString() + "\n");
        }else if (tmp.substr(19, 3)== "PW:"){
            console.log("PW packet received with UID="+tmp.substr(6, 18)+" and len="+tmp.substr(22, 27));
            socket.write("ODEOK\n\r");
        }else if (tmp.substr(19, 3)== "ST:"){
            console.log("ST packet received with UID="+tmp.substr(6, 18)+" and len="+tmp.substr(22, 27));
            socket.write("ODEOK\n\r");
        }else{
            console.log("Unknown data:"+ data);
            socket.write("ODERR\n\r");
        }

    });
    socket.on('close', function(data) {
        console.log('CLOSED: ' + socket.remoteAddress +' '+ socket.remotePort);
    });
    socket.on('end', function() {
        console.log('client disconnected');
    });}).listen(1730);
我用python对它进行了测试,结果很好。我不知道为什么

#!/usr/bin/python

import socket
import time 

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", 1730))
s.listen(10)

while True:
  sc, addr = s.accept()

  data = sc.recv(1024)
  if data[0:4] == "TIME":
    print "TIME command received"
    sc.send(str(int(time.time()))+"\n")
  elif data[19:22] == "PW:":
    print "PW packet received with UID="+data[6:18]+" and len="+data[22:27]
    sc.send("ODEOK\n")
  elif data[19:22] == "SG:":
    print "SG packet received with UID="+data[6:18]+" and len="+data[22:27]
    sc.send("ODEOK\n")
  elif data[19:22] == "ST:":
    print "ST packet received with UID="+data[6:18]+" and len="+data[22:27]
    sc.send("ODEOK\n")
  else:
    print "Unknown data:", data
    sc.send("ODERR\n")

  sc.close()

s.close()

套接字上的调用端将发送一个FIN数据包,客户端可能正在等待该数据包。你能为客户分享代码吗?你是对的!客户端正在等待FIN数据包。这是通过调用socket.end解决的。谢谢!好的,很高兴它现在起作用了。