gpt4 book ai didi

Java套接字编程-流被卡住

转载 作者:行者123 更新时间:2023-12-01 16:07:13 25 4
gpt4 key购买 nike

我目前正在开发一个简单的代理服务器,它接收来自浏览器的http请求,处理它,然后将其转发到所需的网络服务器。

我尝试从浏览器连接的套接字的输入流中获取请求,一切都很好,除了在接收到最后一个数据 block 后流卡住了。

我的代码其实很简单,如下所示:

ServerSocket servSocket = new ServerSocket(8282);  
Socket workSocket = servSocket.accept();
InputStream inStream = workSocket.getInputStream();
byte[] buffer = new byte[1024];
int numberRead = 0;

while ((numberRead = inStream.read(buffer, 0, 1024)) != -1){
System.out.println(new String(buffer));
}

即使请求接收完成,循环也根本无法退出。

有什么方法可以解决这个问题吗?

预先感谢您的任何建议。

最佳答案

InputStream javadoc 所示该方法将阻塞,直到数据可用或遇到 EOF。因此,Socket 的另一端需要关闭它 - 然后 inStream.read() 调用将返回。

另一种方法是先发送您要读取的消息的大小,这样您就可以提前知道必须读取多少字节。或者您可以使用 BufferedReader 以逐行方式从套接字读取。 BufferedReader 有一个 readLine() 方法,每次读取一行时都会返回,这应该适合您,因为 HTTP 协议(protocol)包很好地分为几行。

关于Java套接字编程-流被卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com