Socket获取InputStream的问题 当我在服务器端用Socket建立连接了以后,保持这个连接,并且能够获得这个Socket的InputStream。当客户端传请求过来,我就从这个InputStream中读出数据。但是客户端的请求不是一次传的,有可能分几次传,我怎么才能监测InputStream中有新的数据过来呢?相关的函数是什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么个分次法?只要在客户端的OutputSream不关闭服务器端会被阻塞在InputSream的read上。(这里需要一个循环read)当客户端往OutputSream写数据的时候,服务器端自然就会被唤醒。无需自己去监测InputStream的数据。个人看法THE END ! 是啊,我也是这样设计的,但是总是会有EOFException有这样一段代码:while(!stopFlag){ DataInputStream in=new DataInputStream(socket.getInputStream()); int msgId=in.readUnsignedByte(); System.out.println(msgId);}如果客户端第一次传一个字节过来,第一个循环是没有问题的;客户端再等待10秒钟传第二个字节过来就有错了,因为代码并没有停在int msgId=in.readUnsignedByte();上,就会报EOFException 写一个线程实现run()方法public void run(){ while(true) { if (判断客户端的Socket是否关闭) break; ServerSocket.accept(Socket); }} 现在我改了一个方法,代码如下:while(!stopFlag){ DataInputStream in=new DataInputStream(socket.getInputStream()); int msgId=in.read(); System.out.println(msgId);}现在不会报错了,服务器端会被阻塞在int msgId=in.read();那现在有另外一个问题,我的服务器端要停止这个线程应该用什么办法呢? 参考这个http://community.csdn.net/Expert/topic/4001/4001504.xml?temp=.6679499首先设置stopFlag,或者用线程本身的引用来做判断,将thread设为null然后关闭socket,这时阻塞的read方法就会异常退出 java中线程lock问题? 异常问题 java多线程 CPU占用率100%问题 雅虎搜索报错,过时API 在JAVA中如何实现像VB中的多文档窗体(MDI)格式?在线等!! skip的效率问题??? 把图像文件写入sql server数据库???在线等待 毕业设计问题 请教jbuilder datamodule的用法 小白求教,一个关于java继承的小问题 java生成jpeg/png图片时,如何设置图片质量? 一道简单的算法题
服务器端会被阻塞在InputSream的read上。(这里需要一个循环read)
当客户端往OutputSream写数据的时候,服务器端自然就会被唤醒。
无需自己去监测InputStream的数据。个人看法THE END !
有这样一段代码:
while(!stopFlag){
DataInputStream in=new DataInputStream(socket.getInputStream()); int msgId=in.readUnsignedByte(); System.out.println(msgId);
}
如果客户端第一次传一个字节过来,第一个循环是没有问题的;客户端再等待10秒钟传第二个字节过来就有错了,因为代码并没有停在int msgId=in.readUnsignedByte();上,就会报EOFException
实现run()方法
public void run()
{
while(true)
{
if (判断客户端的Socket是否关闭)
break;
ServerSocket.accept(Socket);
}
}
while(!stopFlag){
DataInputStream in=new DataInputStream(socket.getInputStream()); int msgId=in.read(); System.out.println(msgId);
}现在不会报错了,服务器端会被阻塞在int msgId=in.read();那现在有另外一个问题,我的服务器端要停止这个线程应该用什么办法呢?