我有一个无法更改 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)
我有 python 的以下客户端代码:
....
self.socket.send(b"GET~CARD\n")
print self.socket.recv(1024)
....
我面临的问题是我可以让客户端向服务器发送信息,但服务器不会停止收听,因此它会停留在阻止呼叫this.dis.readUTF();
上。
正如您所看到的,我尝试在字符串末尾使用\n
字符,但它仍在继续监听。有谁知道如何使用readUTF()
从python客户端写入java服务器?
答案 0 :(得分:4)
查看readUTF
函数here
首先,这是突出的
首先,读取两个字节并用于构造无符号的16位 完全按照readUnsignedShort方法的方式。这个 整数值称为UTF长度并指定数量 要读取的其他字节。然后将这些字节转换为 通过分组考虑它们的字符。每组的长度是 根据组的第一个字节的值计算。字节 跟随一个组,如果有的话,是下一组的第一个字节。
在你的python代码中尝试这样的东西
import struct
message = u"GET~CARD\n"
size = len(message)
...
sock.send(struct.pack("!H", size))
sock.send(message)