解决方案 »

  1.   

    socket有什么状不状态的,数据放在缓冲区里,等着上层来取,如果缓冲区满了就丢弃
      

  2.   


    这种说法是不完全正确的。udp的会丢,但TCP的不会丢 ,数据在缓冲区里,但是应用不来存的话,会减少TCP的window。window一旦减少到0,那发送方就不会再发送数据。这个你可以看TCP协议里的拥塞控制。
      

  3.   


    如果是TCP的话,会不断的堆在缓冲区里,只要socket 的缓冲区还有空间,相应socket 的发送方仍然可以发送数据。但缓冲区满之后,后面的socket会处于阻塞状态,发送方不可以再发送数据。如果缓冲区满之后,接收方的数据长期得不到处理(通常为120s),发送方就得不到window update,会引起TIMEOUT,然后会断开。如果你做到单服务器10W的话,我猜你多数是linux的系统,你多找些unix/linux下面的socket开发的资料看看。java的nio只是对这些东西封装而已。
      

  4.   


    这种说法是不完全正确的。udp的会丢,但TCP的不会丢 ,数据在缓冲区里,但是应用不来存的话,会减少TCP的window。window一旦减少到0,那发送方就不会再发送数据。这个你可以看TCP协议里的拥塞控制。不止是接收端的缓冲区吧,中间的路由设备,在拥堵的情况下tcp也会丢数据的吧
      

  5.   


    这种说法是不完全正确的。udp的会丢,但TCP的不会丢 ,数据在缓冲区里,但是应用不来存的话,会减少TCP的window。window一旦减少到0,那发送方就不会再发送数据。这个你可以看TCP协议里的拥塞控制。不止是接收端的缓冲区吧,中间的路由设备,在拥堵的情况下tcp也会丢数据的吧TCP在路由设备的丢包在操作系统这一层就可以解决UDP直接丢另,这种情况和楼主说的情况无关,路由器仅仅在超过物理限制(如网线,NPE设计速率)的时候才会丢包。