服务器在accept后产生一个新的socket对象 sock_c那么每次客户端(就是被accept的那个客户) 发送数据都会通过这个sock_c吧?如果客户端是几次发送 那么这个服务器都会自动识别是这个sock_c吗?比如服务器是否会组塞在 DataInputStream DataIn.readUTF()上? 还是说需要一个循环来做?
比如 while(true)
{ DataIn.readUTF(); }?
比如 while(true)
{ DataIn.readUTF(); }?
是的,只要该客户端不关闭如果客户端是几次发送 那么这个服务器都会自动识别是这个sock_c吗?
当然,只要客户端开着,表示已经建立了连接比如服务器是否会组塞在 DataInputStream DataIn.readUTF()上? 还是说需要一个循环来做?
不会,其实在单线程情况下,WHILE()语句可以不要,但在多线程情况下,就需要循环来建立连接
客户端再发送第二次数据 , 服务器收到后 ,再把他们显示出来 .
服务器的代码是怎样呢? //Server
while(true) {
socket s=accept();
DataInputStream DataIn;
String f = DataIn.readUTF();
System.out.println(f);
}当第一次接收数据完了后 readUTF已经执行完了吧? 然后第2次时又有数据到达时 又回到while循环么? 那么就组塞在accept函数上了啊...
//Server
while(true) {
socket s=accept();
DataInputStream DataIn;
while(flag){ //flag 默认为true,确认数据传输完,置flag 为false
String f = DataIn.readUTF();
System.out.println(f);
}
}
在accept上阻塞是在等待客户端的连接
需要一个循环来做,不过要加一个控制判断读完数据
while(true)
{String str=DataIn.readUTF();
if(str.equal("stop transfor")
{
break;
}
}