• 服务器端与客户端TCP连接入门(三:多线程)


      对于服务器端来说,如果要加入多线程机制,则应该在每个用户连接之后启动一个新的线程

    建立一个EchoThread类,此类专门用于处理多线程操作,此时的多线程使用Runnable接口实现

    package Socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    /**
     * 接收每一个客户端的Socket,并通过循环的方式接收客户端的输入信息及向客户端输出信息
     */
    public class EchoThread implements Runnable {
        
        private Socket client=null;      //接收客户端
        public EchoThread(Socket client){    //通过构造方法设置Socket
            this.client=client;
        }
    
        public void run() {
            PrintStream out=null;
            BufferedReader buf=null;
            
            try {
                buf=new BufferedReader(new InputStreamReader(client.getInputStream()));//得到客户端输入信息
                out=new PrintStream(client.getOutputStream());//实例化客户端的输出流
                boolean flag=true;
                while(flag){    //客户端循环操作
                    String str=buf.readLine();//不断接收信息
                    if(str==null||"".equals(str)){
                        flag=false;
                    }
                    else{
                        if("bye".equals(str)){    //如果输入bye,结束操作
                            flag=false;
                        }
                        else{
                            out.println("ECHO:"+str);//向客户端回显信息
                        }
                    }
                }
                out.close();
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    是是

    package Socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    /*
     * 在服务器端,每一个连接到服务器的客户端Socket都会以一个线程的方式运行,
     * 这样,无论有多少个客户端连接都可以同时完成操作
     */
    public class EchoThreadServer {
    
        public static void main(String[] args) throws Exception {
            ServerSocket server =null;//定义ServerSocket对象
            Socket client=null;//定义socket对象,表示客户端
            
            server = new ServerSocket(8888);//此服务器在8888端口进行监听
            boolean f=true;
            while(f){
                System.out.println("服务器运行,等待客户端连接。");
                client=server.accept();
                new Thread(new EchoThread(client)).start();//实例化并启动一个线程对象
            }
            server.close();
        }
    
    }
  • 相关阅读:
    为什么需要Docker?
    一分钟学会《模板方法模式》
    2018再见|2019你好
    三分钟学会《门面模式》
    策略模式原来这么简单!
    外行人都能看得懂的机器学习,错过了血亏!
    我是如何将博客转成PDF的
    面试前必须知道的MySQL命令【explain】
    count(*)、count(1)和count(列名)的区别
    Linux shell去除字符串中所有空格
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6197494.html
Copyright © 2020-2023  润新知