日期:2014-05-20  浏览次数:20559 次

Java Socket的一个困惑,求大牛解释?!谢谢
代码及问题见注释描述:
Java code

public static void main(String[] args) throws Exception{
        Socket s=new Socket(IP,PORT);
        //这个循环次数很大时会发生。循环次数小时,不会,如1W次。
        for(int i=0;i<1000000;i++){
            String str = "字符串"+i+"\n";
            is=s.getOutputStream();
              is.write(str.getBytes("UTF-8"));
              is.flush();
              //为什么一定要有个睡眠时间??
              //如果没有睡眠时间,当循环次数(发送请求信息)比较大时,
              //服务端不能收到一样多的请求,求解释???!。
              Thread.sleep(50);
        }
          s.close();
      }



------解决方案--------------------
这是不是和服务器端的处理能力也有关系??
------解决方案--------------------
如果你发送的信息过快服务器处理不过来会有异常的,同步的请求是你给了一个服务器那边就要处理这个请求,如果在处理请求还没处理完的时候你突然又给一个请求,服务器要怎么还能顾的上这个请求,不过这是我个人的理解不知道是否正确!!参考而已
------解决方案--------------------
服务器如果处理的够快,或者实现了缓冲机制的话,不加sleep也是可以的
------解决方案--------------------
有睡眠时间是为了保证你的接收数据时间足够长,可以将数据完全接收,如果不加这个时间,并且对方发送数据较大时,可能会导致这笔请求没有接收完成,下一笔请求就来了,会造成数据接收不完整,个人理解,请指教
------解决方案--------------------
和TCP/IP协议有关的把,好像有什么接收窗口Size发送窗口Size的什么 有点记不清了 也和服务器接受数据能力有关 睡眠是保证数据正确接收的一种保障方法
------解决方案--------------------
应该是服务器处理不过来,服务端应该需要使用缓冲流的话,应该不会。