gpt4 book ai didi

java - 套接字 Java 客户端 - Python 服务器

转载 作者:行者123 更新时间:2023-12-03 22:07:45 24 4
gpt4 key购买 nike

我正在尝试实现一个 java - python 客户端/服务器套接字。客户端是java,服务器是python写的

Java 客户端

import java.io.*;  
import java.net.*;
import java.lang.*;

public class client {

public static void main(String[] args) {



try{
Socket socket=new Socket("localhost",2004);

DataOutputStream dout=new DataOutputStream(socket.getOutputStream());
DataInputStream din=new DataInputStream(socket.getInputStream());


dout.writeUTF("Hello");
dout.flush();

System.out.println("send first mess");
String str = din.readUTF();//in.readLine();

System.out.println("Message"+str);


dout.close();
din.close();
socket.close();
}

catch(Exception e){
e.printStackTrace();}


}

}

Python 服务器
import socket               

soc = socket.socket()
host = "localhost"
port = 2004
soc.bind((host, port))
soc.listen(5)

while True:
conn, addr = soc.accept()
print ("Got connection from",addr)
msg = conn.recv(1024)
print (msg)
print(len(msg))

if "Hello"in msg:
conn.send("bye".encode('UTF-8'))
else:
print("no message")

从客户端到服务器的第一条消息正确传递,但从服务器到客户端的第二条消息没有。使用 telnet 我检查服务器是否发送了消息,但客户端陷入死锁并且没有收到消息。
我不明白为什么。

谢谢

最佳答案

似乎您的缩进在 Python 服务器中已关闭,作为要发送的代码
返回给客户端的消息无法访问。

即使修复了缩进,您的服务器实现也不正确,如 msg不是 String .您需要解码 msg如下所示。此外,您需要将消息的长度作为 short 发送。因为您正在使用 DataInputStream#readUTF在您的客户中:

import socket

soc = socket.socket()
host = "localhost"
port = 2004
soc.bind((host, port))
soc.listen(5)

while True:
conn, addr = soc.accept()
print("Got connection from",addr)
length_of_message = int.from_bytes(conn.recv(2), byteorder='big')
msg = conn.recv(length_of_message).decode("UTF-8")
print(msg)
print(length_of_message)

# Note the corrected indentation below
if "Hello"in msg:
message_to_send = "bye".encode("UTF-8")
conn.send(len(message_to_send).to_bytes(2, byteorder='big'))
conn.send(message_to_send)
else:
print("no message")

关于java - 套接字 Java 客户端 - Python 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266026/

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