Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java(客户端)与Python(服务器)的通信_Java_Python_Sockets_Chat - Fatal编程技术网

Java(客户端)与Python(服务器)的通信

Java(客户端)与Python(服务器)的通信,java,python,sockets,chat,Java,Python,Sockets,Chat,我正在做一个简单的Java客户端应用程序,它应该与Python服务器通信。我可以轻松地将字符串发送到Python服务器并在控制台中打印,但当我尝试在IFs中使用接收到的字符串时,它永远不会进入IF语句,即使它应该这样做 下面是Java客户端发送消息的代码 socket = new Socket(dstAddress, dstPort); dataOutputStream = new DataOutputStream( socket.getO

我正在做一个简单的Java客户端应用程序,它应该与Python服务器通信。我可以轻松地将字符串发送到Python服务器并在控制台中打印,但当我尝试在IFs中使用接收到的字符串时,它永远不会进入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服务器中,输出数据是:“UP”

为什么不进入if语句?

DataOutputStream的writeUTF(…)说:

首先,将两个字节写入输出流,就像 writeShort方法,提供要跟随的字节数


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

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