gpt4 book ai didi

java - TCP Java 服务器,Python 客户端字符串不相等

转载 作者:可可西里 更新时间:2023-11-01 02:51:12 24 4
gpt4 key购买 nike

我在 Java 服务器和 Python 客户端之间建立了 TCP 连接。当“q”从任何一个发送到另一个连接时,必须关闭。当我将'q'从python发送到java时它起作用了。但是,当我将“q”从 java 发送到 python 时,它不起作用。我尝试了类型转换,但没有用。

Java 服务器:

公共(public)类发件人{

public static void main(String[] args) throws IOException {
String fromclient;

ServerSocket Server = new ServerSocket(25000);

System.out.println("TCPServer Waiting for client on port 25000");

while (true) {
Socket connected = Server.accept();
System.out.println(
" THE CLIENT" + " " + connected.getInetAddress() + ":" + connected.getPort() + " IS CONNECTED ");

PrintWriter out = new PrintWriter(connected.getOutputStream(), true);
Scanner sc = new Scanner(System.in);


while (true) {
String input = sc.nextLine();
out.println(input);
}
}

}

Python 客户端:

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 25000))
while True:
r, _, _ = select.select([client_socket], [], [])
if r:
data = client_socket.recv(4096)
string_data = data.decode('utf-8')
print str(string_data) == 'q'
if str(string_data) == 'q' or string_data == 'Q':
print ('Connection closed')
client_socket.close()
break
else:
print (string_data)

语句 print str(string_data) == 'q' 总是返回 false

最佳答案

您需要将 Java 服务器代码从 out.println(input) 更改为 out.print(input)。还添加一个 out.flush() 以强制不仅在缓冲区填满后立即发送数据。

println - 还会将换行符发送给客户端

使用 print 它可以按预期工作。

编辑 一些补充。在这种情况下,它有助于 Python 客户端打印出 data 中的字节。

修改Python客户端代码为

data = client_socket.recv(4096)
for i in bytearray(data):
sys.stdout.write(hex(i) + " ")
print

假设 Java 上的输入是 q+ENTER。请参阅下面 Pathon 客户端的输出。

在 Java 服务器端使用 out.println

0x71 0xd 0xa
False
q

在 Java 服务器端使用 out.print

0x71
True
Connection closed

这样就很容易发现发送给客户端的额外字节 (0xd 0xa)。

关于java - TCP Java 服务器,Python 客户端字符串不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com