Jos*_*der 1 python java sockets client server
对于无法更改的Java服务器,我有以下代码片段:
....
while(true){
try {
System.out.println("Will listen . . .");
instruction = this.dis.readUTF(); // Socket's dataInputStream
System.out.println("Got instruction: " + instruction);
} catch (IOException ex) {
Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
}
....
} // end while(true)
Run Code Online (Sandbox Code Playgroud)
我有以下python客户端代码:
....
self.socket.send(b"GET~CARD\n")
print self.socket.recv(1024)
....
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,我可以让客户端向服务器发送信息,但服务器不会停止侦听,因此它停留在阻塞调用上this.dis.readUTF();。
如您所见,我尝试使用\n字符串末尾的字符,但它一直在监听。有谁知道如何使用从 python 客户端写入到 java 服务器readUTF()?
在此处查看该readUTF函数的文档
首先,这很突出
首先,读取两个字节并使用 readUnsignedShort 方法完全相同的方式构造一个无符号的 16 位整数。此整数值称为 UTF 长度,指定要读取的附加字节数。然后通过将它们分组考虑将这些字节转换为字符。每个组的长度是根据组的第一个字节的值计算的。组后面的字节(如果有)是下一组的第一个字节。
在你的 python 代码中尝试这样的事情
import struct
message = u"GET~CARD\n"
size = len(message)
...
sock.send(struct.pack("!H", size))
sock.send(message)
Run Code Online (Sandbox Code Playgroud)