Python客户端写入Java的writeUTF方法

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()

Tom*_*mmy 5

此处查看该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)