问题描述
- socket中while(true)的使用
-
本人初学java编程,在书中看到这个语句,这个是服务端接受语句的代码package dddd; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class MyTcp { private BufferedReader reader; private ServerSocket server1; private ServerSocket server2; private Socket socket1; private Socket socket2; void getserver1(){ try{ server1=new ServerSocket(7993); System.out.println("服务器套接字已经创建成功"); while(true){ System.out.println("等待客户机链接"); socket1=server1.accept(); reader=new BufferedReader(new InputStreamReader(socket1.getInputStream())); getClientMessage(socket1); } }catch(Exception e){ e.printStackTrace(); } } private void getClientMessage(Socket socket){ try{ while(true){ System.out.println("来自客户机的信息:"+reader.readLine()); } }catch(Exception e){ e.printStackTrace(); } try{ if(reader!=null){ reader.close(); System.out.println("readerclose"); } if(socket!=null){ socket.close(); System.out.println("socketclose"); } }catch(IOException e){ e.printStackTrace(); } } public static void main(String[] args){ MyTcp tcp=new MyTcp(); tcp.getserver1(); } }
这里面有两个while(true)都不太明白什么意思。按照我的理解在第二个语句
while(true){ System.out.println("来自客户机的信息:"+reader.readLine()); }
里面,system应该不断输出这个消息啊,但是结果system只是输出了一段消息
我从客户端输入一次服务端便响应一次,程序没问题,就是想知道为何while(true)没有出现死循环。
解决方案
如何在while和for中使用ssh
Delphi中for、while 使用注意事项
【转】for(;;)和while(true)的区别
解决方案二:
因为socket1=server1.accept(); 出现等待状态 。。 你可以debug看一下 他会一直在那地方不动,,,知道有数据传输 才会向下执行。。
解决方案三:
没错啊,首先会先开在accept()这个函数,他在等待状态,如果有客户端发送数据过来,就往下执行,
就会卡在第二个while(true)中,你的log就提体现出来啦,
=>>>>等待客户机链接, 就打印一次,
来自客户机的信息:===>这个一直打印,
这样还理解啊
解决方案四:
reader=new BufferedReader(new InputStreamReader(socket1.getInputStream()));
目前的理解是用上面的语句实例化reader对象后
reader.readLine()
用这个语句调用readline方法,会读取发送来的数据,如果没有数据则会在阻塞状态等到客户端的数据,所以一直在第二个while中循环
时间: 2024-09-12 17:04:30