【问题标题】:Communication Java(Client) with Python(Server)Java(客户端)与 Python(服务器)的通信
【发布时间】:2016-02-12 18:40:29
【问题描述】:

我正在做一个简单的 Java 客户端应用程序,它应该与 Python 服务器通信。我可以轻松地将一个字符串发送到 Python 服务器并在控制台中打印它,但是当我尝试在 IF 中使用接收到的字符串时,即使它应该进入 IF 语句,它也永远不会进入。

这里是Java客户端发送消息代码

        socket = new Socket(dstAddress, dstPort);
        dataOutputStream = new DataOutputStream(
            socket.getOutputStream());
        dataInputStream = new DataInputStream(socket.getInputStream());

        if(msgToServer != null){
            dataOutputStream.writeUTF("UP");
        }

        System.out.println(dataInputStream.readLine());

和 Python 服务器代码:

import socket

HOST = ''
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
print 'Socket now listening'

conn, addr = s.accept()
print 'Connected to: ' + addr[0] + ':' + str(addr[1])

data = conn.recv(1024)
if data == "UP":
     conn.sendall('Works')
else:
     conn.sendall('Does not work')
conn.close()
s.close()
print data

所以当我发送到 Python 服务器“UP”时,它应该发送回 Java 客户端“Works”,但我收到“不工作”并且在 Python Server 中输出数据是:“UP”

为什么不进入 if 语句?

【问题讨论】:

  • 你试过调试data包含的内容吗?
  • 我打印一些“数据”信息,例如:, length = 4 and print data = UP,我还能做什么?
  • 当您查看 George 答案时才有意义:2bytes + 长度 = len 4。前 2 个字节之后的所有内容:data[2:]
  • @WardC 非常感谢,现在可以了 :)

标签: java python sockets chat


【解决方案1】:

DataOutputStream#writeUTF(...) 的 JavaDoc 说:

首先,两个字节被写入输出流,就好像 writeShort 方法给出要跟随的字节数

在您的 python 代码中,您的 data 值将以两个字节为前缀,以表示后面的字符串长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多