0

我已经在网上搜索了一段时间,现在正在寻找这个问题的答案。

发送文件的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”。

任何线索为什么会发生这种情况?

4

1 回答 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())
于 2013-04-03T16:46:23.903 回答