生信小木屋 2017-08-10 10:34 采纳率: 36.4%
浏览 527

java网络编程对于循环结构的困惑

 package network06;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Sever {
    public static void main(String[] args) {
        new Sever().startup();
    }
    private void startup(){
        ServerSocket ss =null;
        Socket s= null;
        try {
            ss =new ServerSocket(5858);
            while(true){
                s =ss.accept();//来一个就创建一个Socket对象
                SeverThread st = new SeverThread(s);//这两句无非是为了run()方法
                new Thread(st).start();             //
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
                try {
                    if(ss!=null)ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    private class SeverThread implements Runnable{
        private Socket s= null;
        private BufferedReader br=null;
        private PrintWriter pw = null;
        private String name ;
        private boolean flag =true;

        public SeverThread(Socket s) throws IOException {
            this.s =s;
            br =new BufferedReader(new InputStreamReader(s.getInputStream()));
            pw = new PrintWriter(s.getOutputStream(),true);
            name = s.getInetAddress().getHostAddress()+":"+s.getPort();
            System.out.println(name+"已经连接上");
        }
        private void receive() throws IOException{
            String str=null;
            while((str=br.readLine())!=null){
                if(str.equalsIgnoreCase("quite")){
                    stop();
                    //关闭,进行资源的释放
                    pw.println("close");
                    break;
                }
                System.out.println(name+"--"+str);
                pw.println("Receive"+str);

            }
            System.out.println(name+"已经离开");
        }
        private void stop(){
            flag=false;
        }

        public void run() {
            try {
                //while(true){
                //  if(!flag)break;
                    receive();
                //}
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    if(s!=null)s.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }

}



线程调用run()方法,这个外层循环结构,有什么作用?while((str=br.readLine())!=null)好像可以控制输入循环,就一直等着我们输入
图片说明

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2018-06-14 16:21
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求