【问题标题】:Python client write to Java's writeUTF methodPython客户端写入Java的writeUTF方法
【发布时间】:2015-07-15 17:55:03
【问题描述】:

我有以下代码 sn-p 用于无法更改的 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 服务器吗?

【问题讨论】:

  • 尝试使用 Unicode 字符串文字,u"GET~CARD"

标签: java python sockets client server


【解决方案1】:

查看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)

【讨论】:

  • 这正是我想要的!只需使用sock.send 而不是sock.write,一切都像魅力一样!谢谢!
猜你喜欢
  • 2021-11-04
  • 2012-05-18
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多