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();
        }
    
    }
  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6197494.html
Copyright © 2011-2022 走看看