我遇到了Java ServerSocket和Python的问题,我有一个可以与多个Java客户端通信的多线程echo服务器(用Java编写)。一切正常。
当我尝试连接python客户端时,python客户端可以从服务器接收数据,但是当它发送数据时,服务器似乎永远不会接收它。
当我尝试发送500K +字节时,我只能在服务器上看到数据。虽然我现在可以看到数据不完整且不同步。
我测试了以下示例代码,它可以正常使用python: http://norwied.wordpress.com/2012/04/17/how-to-connect-a-python-client-to-java-server-with-tcp-sockets/
唯一真正的区别在于它使用的链接代码:
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(),
我在服务器中使用的地方:
streamOut = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
这会导致问题吗?
答案 0 :(得分:1)
在您的代码示例中,PrintWriter设置为autoflush。这意味着当调用println()
时,缓冲区将被刷新,并因此被发送到网络。但是,您使用BufferedOutputStream可能忘记了flush()
您的OutputStream。
答案 1 :(得分:0)
我认为你的python客户端没有刷新流,这就是为什么java服务器只在客户端上的缓冲区已满后获取数据的原因。