我的应用程序面临一个奇怪的问题,我能够作为客户端连接到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);