使用Python客户端向Java服务器发送数据

0 投票
1 回答
689 浏览
提问于 2025-04-17 20:08

我在网上搜索了一段时间,想找到这个问题的答案。

这是用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())

撰写回答