从客户端本机读取TCP IP消息

时间:2019-12-31 21:58:35

标签: javascript python react-native tcp tcpclient

我的应用程序面临一个奇怪的问题,我能够作为客户端连接到TCP IP,这是我在Javascript中使用的代码:

const cn = TcpSocket.createConnection({
  port: 27015,
  host: '192.168.0.10',
  localAddress: '192.168.0.11',
});
cn.on('data', res => {
  cn.write('\x80\x00\x00');
});
cn.on('error', function(error) {
  console.log('imce error: ', error);
});
cn.on('close', function() {
  console.log('Connection closed!');
});

但是当我从服务器接收消息时出现了问题,对于每条消息,我都应该像这样发送回确认 cn.write('\ x80 \ x00 \ x00'); 直到某处然后我没有收到来自服务器的消息,虽然这里很奇怪,但是我制作了另外两个脚本,它们在Python中工作得很好,在PHP中一个都很好,它们都有相同的逻辑含义进行连接,然后作为客户端写入数据,但是在这里唯一的不同是,当我读取数据并通过无限循环读取数据时,您可以看到两个示例,现在我想知道 cn.on('data',此处有回调)就像在两个示例中一样,在每次有新消息时都将其存储在一个变量中,然后在Javascript中也运行无限循环。

Python示例:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.0.15', 27015)
print(sys.stderr, 'connecting to %s port %s' % server_address)
sock.connect(server_address)
full_msg = ''
try:
    # Send data
    message = '\x06\x01\x0C\x19\x40\x49\x07\x56\x04\x00\x00\x00\x00\x04\x00'
    print(sys.stderr, 'sending amount "%s"' % message)
    sock.sendall(message)

    while True:
            msg = sock.recv(1024)
            if len(msg) <= 0:
                    break
            full_msg += msg
            ackmsg = '\x80\x00\x00'
            print(sys.stderr, 'sending ack "%s"' % message)
            sock.sendall(ackmsg)
finally:
    print(sys.stderr, 'closing socket')
sock.close()

PHP示例:

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if(!is_resource($socket)) onSocketFailure("Failed to create socket");

socket_connect($socket, "192.168.0.10", 27015) or onSocketFailure("Failed to connect to chat.stackoverflow.com:6667", $socket);

socket_write($socket, "\x06\x01\x0C\x19\x40\x49\x07\x56\x04\x00\x00\x00\x00\x04\x00");

while(true) {
    $line = socket_read($socket, 1024);
    error_log(strlen($line));
    if(strlen($line) <= 0) {
        break;
    }
    error_log($line);
    socket_write($socket, "\x80\x00\x00");

}

socket_close($socket);

0 个答案:

没有答案