你可以在服务器端定义一个无限循环来等待客户端的输入,同时对客户端的输入进行校验,当为空时就继续循环,而不要进行任何处理,客户端用flush()来控制输出达到服务器端的内容我编写过一个这样的model,如果感兴趣,可以留个信箱给我,我发给你一份例子祝好运
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
     可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]

解决方案 »

  1.   

    是不是意味着我要自己先处理client的request,而不能直接把那个instream拿给DocumentBuilder去parse?
      

  2.   

    是不是意味着我要自己先处理client的request,而不能直接把那个instream拿给DocumentBuilder去parse?
      

  3.   

    通讯归通讯,暂时撇开你要交互的是什么内容,就当成是一个String,实际也是这样。Socket的通讯分长连接和短连接,前者的连接一直处于保持状态,直到客户端close,后者则是服务器端接受后返回时就由服务器close掉。所以为了避免无休止的read,你只能在包头里定义好每次你发包的长度,然后双方根据读到的包头(负责定义发送内容长度,状态等)解析出要读取的数据长度,这样就可以解决了。
      

  4.   

    也就是说用类似于HTTP这样的协议先封装内容,建立一个连接无关的通信层,是不是?我想模拟一个SOAP体系,本来不想通过HTTP,想做成SOAP on Socket。现在看来,必须做成SOAP on Http才行了。谢谢yqz。
      

  5.   

    你需要与客户端有一个协议,以便让服务器知道什么时候XML文件结束
      

  6.   

    可以给我个例子吗,阿宝大虾.
    [email protected]
      

  7.   

    可以给我个例子吗,阿宝大虾.
    [email protected]
      

  8.   

    public String recvPackage() throws Exception
        {
            if((sock==null) || (reader==null))
                throw new Exception("套接口无效,无法读取数据");        //System.out.println("read");
            char[] cHeadbuf=new char[5];   //存储约定的包头长度数据
            String rtn=null;
            int iRecvlen = reader.read(cHeadbuf,0,5);
            rtn = new String(cHeadbuf);
            
            if(iRecvlen==5)
            {
                int iPkgLen=  Integer.parseInt(rtn.substring(0,5).trim(),10);  //转换成10进制的长度            iPkgLen-=5;
                while(iPkgLen>0)
                {
                    int temp_data=reader.read();                      
                    if(temp_data==-1) throw new Exception("套接口数据读取失败");                StringBuffer str_buff=new StringBuffer();
                    str_buff.append((char)temp_data);
                    String temp=new String(str_buff);
                    iPkgLen-=temp.getBytes().length;
                    rtn+=temp;
                }
                
                      //接收数据完成
                return rtn;
            }
            throw new Exception("接收数据异常");
        }