服务器在accept后产生一个新的socket对象  sock_c那么每次客户端(就是被accept的那个客户) 发送数据都会通过这个sock_c吧?如果客户端是几次发送  那么这个服务器都会自动识别是这个sock_c吗?比如服务器是否会组塞在 DataInputStream  DataIn.readUTF()上?  还是说需要一个循环来做?
比如 while(true)
      {        DataIn.readUTF();      }?

解决方案 »

  1.   

    服务器在accept后产生一个新的socket对象  sock_c那么每次客户端(就是被accept的那个客户) 发送数据都会通过这个sock_c吧?
    是的,只要该客户端不关闭如果客户端是几次发送  那么这个服务器都会自动识别是这个sock_c吗?
    当然,只要客户端开着,表示已经建立了连接比如服务器是否会组塞在 DataInputStream  DataIn.readUTF()上?  还是说需要一个循环来做?
    不会,其实在单线程情况下,WHILE()语句可以不要,但在多线程情况下,就需要循环来建立连接
      

  2.   

    xjy427()  我还不是很懂 ,客户端发送一次数据后 , 休息一会   ,然后服务器收到这些数据, 把他们显示出来   ,
    客户端再发送第二次数据 ,  服务器收到后 ,再把他们显示出来   .
      
    服务器的代码是怎样呢?    //Server
         while(true)    {
            socket s=accept();
            DataInputStream  DataIn;
             String f = DataIn.readUTF();
             System.out.println(f);
        }当第一次接收数据完了后 readUTF已经执行完了吧? 然后第2次时又有数据到达时 又回到while循环么? 那么就组塞在accept函数上了啊...
      

  3.   

    服务器的代码应该是这样吧
        //Server
         while(true)    {
            socket s=accept();
            DataInputStream  DataIn; 
            while(flag){  //flag 默认为true,确认数据传输完,置flag 为false 
             String f = DataIn.readUTF();
             System.out.println(f);
           }
        }
    在accept上阻塞是在等待客户端的连接
      

  4.   

    会阻塞,你可以用java.nio.*;来解决Socket阻塞问题
      

  5.   

    服务器阻塞在DataInputStream DataIn.readUTF()上,等待数据!
    需要一个循环来做,不过要加一个控制判断读完数据
     while(true)
    {String str=DataIn.readUTF();
    if(str.equal("stop transfor")
     {
       break;
     }
    }