套接字在关闭之前不会发送数据

时间:2017-11-24 17:00:45

标签: java python sockets

我有一个简单的应用程序,它在java(服务器)和python(客户端)之间创建一个套接字。 python代码的主要功能是从用户获取数据并将其发送到服务器(java代码)

这里是python代码

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))

while True:
    data = input("Enter data to send : ")
    if(data == 'q'):
        break

    client_socket.sendall(data.encode('utf-8'))

client_socket.close()

这里是java代码

    String fromclient;

    ServerSocket Server = new ServerSocket (5000);


    while(true) 
    {
        Socket connected = Server.accept();
        BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
        fromclient = inFromClient.readLine();

        if ( fromclient.equals("q") ){
                connected.close();
                break;
            }else {
              System.out.println(fromclient);
         }
    }

当我写任何文本并单击回车时,没有任何内容转到java代码,也没有任何内容打印到控制台,但当我发送' q'从python,python代码关闭,我写的所有数据现在都在java控制台中打印。 我不知道这是什么原因,以及我如何解决它。

1 个答案:

答案 0 :(得分:1)

Java代码等待换行符,但Python部分不发送换行符(input在它返回的字符串中没有提供换行符。)

尝试

client_socket.sendall((data+'\n').encode('utf-8'))

<小时/> 正如@Kayaman建议的那样,accept位置错误(也是BufferedReader)。

Socket connected = Server.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
while(true) 
{
    fromclient = inFromClient.readLine();

会是一个更好的订单。

此外,Python客户端不会发送&#39; q&#39;目前的形式。因此iffromclient.equals("q")不会关闭套接字,代码将会在下一个readLine()上消失。重新订购Python部分:

data = input("Enter data to send : ")
client_socket.sendall((data+'\n').encode('utf-8'))

if(data == 'q'):
    break