0

ソケットを使用して単純な関数を公開する次のコードを使用しています。

while (true) {
  try {
    ServerSocket serverSocket = new ServerSocket(7070);
    Socket clientSocket = serverSocket.accept();
    String input = (new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))).readLine();
    synchronized (this.map) {
      ObjectOutputStream o = new ObjectOutputStream(clientSocket.getOutputStream());
      o.writeChars(map.get(input));
      o.close();
    }
    clientSocket.close();
    serverSocket.close();
  } catch(Exception e) {
    e.printStackTrace();
  }
}



私は何が間違っているのですか?ロギングは、それが入力受信ラインでスタックしていることを示し、ソケットが使用中であることを示す例外をスローすることがあります

4

2 に答える 2

3

手始めに、ループの[i]内側[/i]にServerSocketを作成していますが、これは明らかにあなたが望むものではありません。一度だけ作成して、ソケットから常に読み取るループを作成します。

于 2009-03-24T14:30:46.777 に答える
2

送信者 (他のプロセス) の出力ストリームをフラッシュするのを忘れたため、readLine() がスタックします。

ソケットを使用する場合、ネットワーク経由で少量のデータを送信するとコストがかかるため、コンピューターは一部のデータ (通常は 4KB) をバッファーします。したがって、データが少ない場合は、「今すぐ送信」と伝える必要があります。

于 2009-03-24T14:50:35.373 に答える