关于Socket read堵塞问题
模I拟下 有一个客户端 有一个服务器端
客户端发送数据到服务器端
客户端连接到服务器端时 一般我们采取开启一个线程去处理
然后一般是这么写
InputStream stream = socket.getInputStream();
byte [] by=new byte[4];
int count=0;
StringBuild sb=new StringBuild();
while(true){
while((count=stream.read(by))!=-1){
sb.append(new String(by,0,count));
}
}
那么这时候就会照成堵塞
往往会把Socket的流想象成文件流一样
当read!=-1就是读完了
这是错误的
那么在什么情况下read=-1呢 当我们调用客户端的socket.shutdownOutputStream() 那么这时候read就会一直是-1
这里我总结了一下四种解决此问题的方法。
第一种 规定数据大小
这种情况下一般适合你知道客户端最大发送的字符数量