java – 空套接字InputStream
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 空套接字InputStream,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1307字,纯文字阅读大概需要2分钟。
内容图文
我正在尝试用Java构建一个简单的Web服务器,但我遇到了一个非常奇怪的问题.当我尝试从Socket读取InputStream时,有时无法读取数据.
我正在遵循的流程如下:
我创建一个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无济于事.
解决方法:
一个插槽可以接收更多数据包.所以你应该为每个套接字创建一个新线程.就像是:
while(true){
Socket socket = serv.accept();
Client client = new Client(socket);
new Thread(client).start();
}
然后,您需要创建实现可运行接口的Client类.
Socket socket;
public Client(Socket socket){
this.socket = socket;
}
public void run(){
while(socket.isConnected()){
//here reads the packets from the inputstream
}
}
内容总结
以上是互联网集市为您收集整理的java – 空套接字InputStream全部内容,希望文章能够帮你解决java – 空套接字InputStream所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。