我正在尝试在 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());
}
}
编辑:我也试过使用 aBufferedInputStream
并BufferedReader
没有用。