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の「フラッシュ」と関係があると思われますが、Pythonを使用して「フラッシュ」を行う方法が見つかりません。

なぜこれが起こるのか手がかりはありますか?

4

1 に答える 1

0

何らかの理由で競合状態が発生していることがわかりました.Pythonコードにスリープ(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 に答える