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的什么 有点记不清了 也和服务器接受数据能力有关 睡眠是保证数据正确接收的一种保障方法
------解决方案--------------------应该是服务器处理不过来,服务端应该需要使用缓冲流的话,应该不会。