練習としてJavaで単純なWebサーバーを構築しようとしていますが、非常に奇妙な問題が発生しています。InputStream
からを読み取ろうとすると、読み取るSocket
データがない場合があります。私がフォローしているプロセスは次のとおりです。
を作成しServerSocket
、ポート80でリッスンし、を呼び出しaccept()
てを取得しSocket
ます。次に、ブラウザ(Firefox)からにリクエストを送信します。localhost
これにより、がトリガーaccept()
されてが返されSocket
ます。
場合によっては、HTTPリクエストを完全に読み取ることがあります。それ以外の場合は、データの読み取りに失敗します(read()
-1を返します)。
例外処理をスローせずに、私が行っていることを説明するためのサンプルコードを次に示します。
ServerSocket serv = new ServerSocket(80);
while (true)
{
Socket con = ServerSocket.accept();
InputStream input = con.getInputStream();
bytes[] bytes = new bytes[4000000]; // for simplicity, I figured I'd
// just make the array huge for now
int bytesRead = input.read(bytes);
if (bytesRead > 0)
{
StringBuffer sBuffer = new StringBuffer(bytesRead);
for (int i = 0; i < bytesRead; i++)
{
sBuffer.append((char) bytes[i]);
}
System.out.println(sBuffer.toString());
}
}
編集:私はまた、とを使用して利用しようとしましBufferedInputStream
たBufferedReader
。