zoukankan      html  css  js  c++  java
  • 服务器端与客户端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();
        }
    
    }
  • 相关阅读:
    树洞留言板~
    异常The following attributes are mutually exclusive: asproute aspcontroller, aspaction asppage, asppagehandler
    持续交付:发布可靠软件的系统方法
    sql分页遍历出现重复数据原因与解决方案
    jenkens2权威指南
    timer
    window10、window11连接局域网共享打印机失败处理办法
    解决“Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足……”
    ts在项目中的使用三斜线引入 与 import区别
    vue unshift渲染遇到的坑
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6197494.html
Copyright © 2011-2022 走看看