将数据从Java套接字服务器发送到Python客户端

时间:2018-12-15 10:32:18

标签: java python sockets

我也试图从Java服务器和Python客户端传输数据。我可以成功地将数据从客户端传输到服务器,但是根本没有收到数据。

在python客户端上,我有这个:(请注意,这是在单独的线程中运行的)

#mp_log is a custom function for logging, treat it as a print.
def listen_loop():
global client_socket

mp_log("Client socket value:")
mp_log(repr(client_socket))

while True:
    mp_log("Waiting on data from the server. Inside while.")

    if client_socket is None:
        mp_log("Client Socket is null, skipping data check.")
        continue
    data = client_socket.recv(1)
    mp_log("Got some data: " + data)

如果此操作成功完成,则输出将是客户端套接字值,在服务器上等待,然后获取一些数据。但是,它一直在等待数据。

这意味着套接字显然不是None,它正在等待接收缓冲区吗?我将接收缓冲区的大小设置为1,以查看是否有数据通过。这是我从服务器发送的代码:

// Earlier in the code, to create the writer. 
this.writer = new PrintWriter(this.socket.getOutputStream(),true);

我已启用自动刷新功能作为测试,以确保实际刷新了数据。

public void send(String data) {
    System.out.println("Sending data to this client.");

    this.writer.println(data);
    this.writer.flush();
}

我知道由于控制台输出出现而正在调用此方法。

我发现奇怪的是,我能够从python客户端发送数据,但是什么也没收到。 我尝试过但失败的其他事情是使用其他输出方法,例如DataOutputStream。

编辑:添加用于两种语言的套接字创建代码。 Java:

public Connection(Socket socket) throws IOException {
    this.socket = socket;
    this.reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));

    this.writer = new PrintWriter(this.socket.getOutputStream(),true);

    this.listenThread = new Thread(this);
    this.listenThread.start();

    // Test message
    send("Test Message " + System.currentTimeMillis());
}

和Python:

global client_socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
threading.Thread(target=listen_loop).start()
client_socket.connect(("localhost", 5000))

1 个答案:

答案 0 :(得分:0)

 `data = client_socket.recv(1)`

尝试通过data=client_socket.recv(1024)进行更改 我想我不确定是否有类似的问题,例如您给recv(1)的数字是否是您的缓冲区,希望能对您有所帮助