ファイルをホストするための基本的なHTTPサーバーを作成していました。途中で私はサーバーがクライアントデータを受信していることをテストしたかったのです。以下のコードを使用すると、NoSuchElementException
例外がスローされます。 Scannerは、ほとんどの場合でもクライアントからの回線を受信していません。ここでは、コードがあります:これが発生した場合、接続が低下したり、サーバーが最終的にクライアントデータを受信する前にJava ServerSocketがクライアントデータをランダムに受信しない場合があります
import java.net.*;
import java.io.*;
import java.util.*;
import java.nio.file.*;
public class Simple {
@SuppressWarnings("empty-statement")
public static void main(String[] args) {
try{
ServerSocket ss = new ServerSocket(80);
while(true){
try{
Socket sock = ss.accept();
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
out.write("HTTP/1.1 200 OK\r\nContent-type:text/html;charset=utf-8\r\n\r\n".getBytes());
Scanner sc = new Scanner(in);
out.write(sc.nextLine().getBytes());
sock.close();
} catch(Exception ex){
System.err.println(ex);
}
}
} catch(Exception ex){
ex.printStackTrace();
}
}
}
、クライアント接続は非常に長い時間を待ちます。どんな助けもありがとうございます。
いいえ、これはThis questionの複製ではありません。 (これらは2つの別々の質問です)。
クライアントのハングアップを止めるには、キャッチブロック内のソケットを閉じるか、 'try(ソケットソケット= ss.accept()){...} catch ... 'を使用する必要があります。 –
[mcve ]をクリックします。実際にこれをトラブルシューティングするには、接続のクライアント側に何があるかを知る必要があります。それはあなたが書いたコードか、ブラウザか他の何かですか? –
クライアントがリクエストを送信する前にレスポンスを送信して、クライアントを混乱させるのではないかと思います。これは断続的な挙動を説明するかもしれない。 –