简体   繁体   中英

Socket messaging between Java Client and Python Server

I try to create a Socket messager between a Java Client and Python Server. It works to send a message ("Testdata") from client to server and print it out. But after input and send a message from server to client, I get no output from client. The client 'freezes' and must be terminated.

What is the problem with my client input?


Terminal Server:

py socketServer.py
Connection from: ('127.0.0.1', 57069)
from connected user: Testdata
> Test
send data..

Terminal Client:

java socketClient   
Testdata

Python-Server:

import socket

def socket_server():
    host = "127.0.0.1"
    port = 35100

    server_socket = socket.socket()
    server_socket.bind((host, port))
    server_socket.listen(2)
    conn, address = server_socket.accept()
    print("Connection from: " + str(address))
    while True:
        data = conn.recv(1024).decode()
        if not data:
            break
        print("from connected user: " + str(data))
        data = input('> ')
        conn.send(data.encode())
        print("send data...")
    conn.close()

if __name__ == '__main__':
    socket_server()

Java-Client:

private static void socketTest(){
    String hostname = "127.0.0.1";
    int port = 35100;

    try (Socket socket = new Socket(hostname, port)) {
        OutputStream output = socket.getOutputStream();
        PrintWriter writer = new PrintWriter(output, false);

        BufferedReader input =
                new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
        Scanner in = new Scanner(System.in);
        String text;

        do {
            text = in.nextLine();
            writer.print(text);
            writer.flush();
            System.out.println("from server: " + input.readLine());
        } while (!text.equals("exit"));

        writer.close();
        input.close();
        socket.close();
    }
}

这是因为 python 消息没有像@carlos palmas 在这个答案中所说的那样用\\r\\n明确完成。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM