当我在服务器端用Socket建立连接了以后,保持这个连接,并且能够获得这个Socket的InputStream。当客户端传请求过来,我就从这个InputStream中读出数据。但是客户端的请求不是一次传的,有可能分几次传,我怎么才能监测InputStream中有新的数据过来呢?相关的函数是什么?

解决方案 »

  1.   

    怎么个分次法?只要在客户端的OutputSream不关闭
    服务器端会被阻塞在InputSream的read上。(这里需要一个循环read)
    当客户端往OutputSream写数据的时候,服务器端自然就会被唤醒。
    无需自己去监测InputStream的数据。个人看法THE END !
      

  2.   

    是啊,我也是这样设计的,但是总是会有EOFException
    有这样一段代码:
    while(!stopFlag){
         DataInputStream in=new DataInputStream(socket.getInputStream());     int msgId=in.readUnsignedByte();     System.out.println(msgId);
    }
    如果客户端第一次传一个字节过来,第一个循环是没有问题的;客户端再等待10秒钟传第二个字节过来就有错了,因为代码并没有停在int msgId=in.readUnsignedByte();上,就会报EOFException
      

  3.   

    写一个线程
    实现run()方法
    public void run()
    {
      while(true)
      {
        if (判断客户端的Socket是否关闭)
          break;
        ServerSocket.accept(Socket);
      }
    }
      

  4.   

    现在我改了一个方法,代码如下:
    while(!stopFlag){
         DataInputStream in=new DataInputStream(socket.getInputStream());     int msgId=in.read();     System.out.println(msgId);
    }现在不会报错了,服务器端会被阻塞在int msgId=in.read();那现在有另外一个问题,我的服务器端要停止这个线程应该用什么办法呢?
      

  5.   

    参考这个http://community.csdn.net/Expert/topic/4001/4001504.xml?temp=.6679499首先设置stopFlag,或者用线程本身的引用来做判断,将thread设为null然后关闭socket,这时阻塞的read方法就会异常退出