使用Python客户端向Java服务器发送数据
我在网上搜索了一段时间,想找到这个问题的答案。
这是用Python发送文件的代码:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
with open(path, mode='rb') as f:
s.sendall(f.read())
这是用Java接收数据的代码:
private BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path))) {
while (true) {
int size = bis.read(by);
if (size > 0) {
bos.write(by, 0, size);
bos.flush();
total += size;
System.out.println(size + "(" + total + ")");
if (total == length) {
break;
}
}
}
}.....
我看到数据确实被发送了,我也知道Java那边的数据流里有数据。但是,bis.read(by)这个调用一直卡在那里,直到连接断开才会读取数据。
我怀疑这可能和Java里的“flush”有关,但我找不到在Python中如何进行“flush”的方法。
有没有什么线索可以解释为什么会这样?
1 个回答
0
我搞明白了,出了一些奇怪的情况,出现了“竞争条件”。在Python代码里加上一个睡眠时间sleep(0,2),结果让Java服务器能够正常响应了。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sleep(0.2)
with open(path, mode='rb') as f:
s.sendall(f.read())