【发布时间】:2023-01-03 01:33:09
【问题描述】:
我需要使用 Java 和 Python 套接字进行连接。我编写了用 Python 创建服务器的代码和用 Java 创建客户端的代码,以便能够在 Python 和 Java 之间进行通信。
连接已正确创建,当使用writeUTF() 将数据从 Java 发送到 Python 时它有效,但是当从 Python 发送数据并使用 readUTF() 使用 java 读取时,我收到 EOF 异常。有趣的是,如果我使用 readLine() 方法从 Java 中读取,它就可以工作。
服务器代码:
import socket
ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ser.bind(("localhost", 7000))
ser.listen(1)
cli, addr = ser.accept()
recibido = cli.recv(1024)
recibido = recibido.decode("UTF8")
print("Recibo conexion de la IP: " + str(addr[0]) + " Puerto: " + str(addr[1]))
print(recibido)
enviar = "hola tio".encode("UTF8")
cli.send(enviar)
cli.close()
ser.close()
print("Conexiones cerradas")
客户端代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
public class Cliente {
public static void main(String[] args) throws IOException, InterruptedException {
Socket cliente = new Socket("localhost", 7000);
DataOutputStream entrada = new DataOutputStream(cliente.getOutputStream());
DataInputStream salida = new DataInputStream(cliente.getInputStream());
entrada.writeUTF("Hola soy cliente");
System.out.println(salida.readUTF());
cliente.close();
}
}
例外:
Exception in thread "main" java.io.EOFException
at java.base/java.io.DataInputStream.readFully(DataInputStream.java:202)
at java.base/java.io.DataInputStream.readUTF(DataInputStream.java:614)
at Cliente.main(Cliente.java:15)
【问题讨论】:
-
您可能认为您的服务器代码适用于
writeUTF(),但它实际上不能(或者至少,您错过了服务器接收到的字符串包含两个额外字符的事实:NUL (0x00) 和 LF (0x10)。 -
好问题,因为它包含所有相关信息!