【问题标题】:Socket Java client - Python ServerSocket Java 客户端 - Python 服务器
【发布时间】:2018-06-24 06:19:00
【问题描述】:

我正在尝试实现一个 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 我检查服务器是否发送消息,但客户端陷入死锁并且没有收到消息。 我不明白为什么。

谢谢

【问题讨论】:

    标签: java python sockets client-server


    【解决方案1】:

    您的缩进在 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")
    

    【讨论】:

    • 谢谢,您的解决方案解决了我的问题,错误的缩进是复制粘贴错误!
    猜你喜欢
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多