Java客户端与Python服务器的套接字编程

1 投票
5 回答
14250 浏览
提问于 2025-04-18 18:34

我有一个用Java写的客户端程序,它会向Python服务器发送一条消息“Hello”。

Java代码

    import java.io.*;  
    import java.net.*; 
    public class MyClient {
    public static void main(String[] args) {  

    try{      
    Socket soc=new Socket("localhost",2004);  
    DataOutputStream dout=new DataOutputStream(soc.getOutputStream());  
    dout.writeUTF("Hello");
    dout.flush();
    dout.close();  
    soc.close();
    }catch(Exception e){
        e.printStackTrace();}  
    }  

Python服务器代码

    import socket               # Import socket module

    soc = socket.socket()         # Create a socket object
    host = "localhost" # Get local machine name
    port = 2004                # Reserve a port for your service.
    soc.bind((host, port))       # Bind to the port
    soc.listen(5)                 # Now wait for client connection.
    while True:
    conn, addr = soc.accept()     # Establish connection with client.
    print ("Got connection from",addr)
    msg = conn.recv(1024)
    print (msg)
    if ( msg == "Hello Server" ):
    print("Hii everyone")
    else:
    print("Go away")

问题是,Java客户端能够成功发送“Hello”消息到Python服务器,但在Python这边,else语句总是会执行,输出“Go away”。python版本 2.7

输出结果:

('Got connection from', ('127.0.0.1', 25214))
Hello
Go away

5 个回答

-1

问题是你需要在Python服务器中指定解密时使用UTF-8编码,然后在Java客户端中使用dout.writeBytes("Hello Server")来发送数据。

-1

只需要使用正确的语法。因为你发送的是“Hello”,所以你的输出将是“Go away”。

if ( msg == "Hello Server" ):
    print("Hii everyone")
else:
    print("Go away")
0

在你写的Java代码中

dout.writeUTF("Hello");

但是Python服务器希望当你发送“Hello Server”时,它会打印出“Hii Everyone”。

把Java客户端的代码改成

dout.writeUTF("Hello Server");
1

因为你在服务器端得到的字符串开头有两个隐藏的字符,所以在进行比较之前,你必须先把这两个字符去掉。

if ( msg[2:] == "Hello" ):
4

你从客户端收到了'Hello'。

if ( msg == "Hello" ):
    print("Hii everyone")
else:
    print("Go away")

撰写回答