小豆子0722 2015-09-24 05:02 采纳率: 20%
浏览 4586

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)没有出现死循环。

  • 写回答

4条回答 默认 最新

  • Chanwenmo 2015-09-24 05:31
    关注

    因为socket1=server1.accept(); 出现等待状态 。。 你可以debug看一下 他会一直在那地方不动,,,知道有数据传输 才会向下执行。。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器