Python客户端写入Java的writeUTF方法

时间:2015-05-05 20:15:39

标签: java python 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)

我有 python 的以下客户端代码:

.... 
self.socket.send(b"GET~CARD\n")
print self.socket.recv(1024)
....

我面临的问题是我可以让客户端向服务器发送信息,但服务器不会停止收听,因此它会停留在阻止呼叫this.dis.readUTF();上。

正如您所看到的,我尝试在字符串末尾使用\n字符,但它仍在继续监听。有谁知道如何使用readUTF()从python客户端写入java服务器?

1 个答案:

答案 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)