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();
        }
    
    }
  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6197494.html
Copyright © 2011-2022 走看看