zoukankan      html  css  js  c++  java
  • java多线程实现多客户端socket通信

    一、服务端

    package com.czhappy.hello.socket;
    
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static void main(String[] args) {
            //创建ServerSocket示例,指定端口,侦听
            try {
                ServerSocket serverSocket = new ServerSocket(8888);
                System.out.println("服务即将启动,等待客户端连接");
                //记录客户端的数量
                int count = 0;
                Socket socket = null;
                while(true){
                    //开始监听,等待客户端的连接
                    socket = serverSocket.accept();
                    ServerThread serverThread = new ServerThread(socket);
    serverThread.setPriority(4);//设置线程的优先级,范围是:[1,10],默认为5 serverThread.start(); count
    ++; System.out.println("客户端的数量="+count); InetAddress address = socket.getInetAddress(); System.out.println("当前客户端的IP地址为:"+address.getHostAddress()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
    package com.czhappy.hello.socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.Socket;
    
    /**
     * 服务器线程处理类
     * @author Administrator
     *
     */
    public class ServerThread extends Thread{
        
        Socket socket = null;
        
        public ServerThread(Socket socket){
            this.socket = socket;
        }
        
        public void run() {
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader br = null;
            OutputStream os = null;
            PrintWriter pw = null;
            try {
                //获取字节输入流
                is = socket.getInputStream();
                //将字节输入流转化为字符输入流
                isr = new InputStreamReader(is, "utf-8");
                //为字符输入流添加缓冲
                br = new BufferedReader(isr);
                String data = br.readLine();
                while(data!=null){
                    System.out.println("我是服务器,客户端说:"+data);
                    data = br.readLine();
                }
                //关闭输入流
                socket.shutdownInput();
                //获取输出流,响应客户端请求
                os = socket.getOutputStream();
                pw = new PrintWriter(os);
                pw.write("欢迎您!");
                pw.flush();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try {
                    if(pw!=null){
                        pw.close();
                    }
                    if(os!=null){
                        os.close();
                    }
                    if(br!=null){
                        br.close();
                    }
                    if(isr!=null){
                        isr.close();
                    }
                    if(is!=null){
                        is.close();
                    }
                    if(socket!=null){
                        socket.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }
    
    }

    二、客户端

    package com.czhappy.hello.socket;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class Client {
        
        public static void main(String[] args) {
            try {
                //创建客户端Socket,指定服务器地址和端口
                Socket socket = new Socket("192.168.0.45", 8888);
                //获取输出流,向服务器发送消息
                OutputStream os = socket.getOutputStream();//字节输出流
                PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流
                pw.write("用户名:admin;密码:123");
                pw.flush();
                socket.shutdownOutput();//关闭输出流
                //获取输入流,读取服务器端响应信息
                InputStream is = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String data = br.readLine();
                while(data!=null){
                    System.out.println("我是客户端,服务器说:"+data);
                    data = br.readLine();
                }
                
                br.close();
                is.close();
                pw.close();
                os.close();
                socket.close();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        
    
    }

    三、测试结果

    需要先启动服务端,再启动客户端

    服务端运行结果:

    客户端运行结果:

  • 相关阅读:
    ISSCC 2017论文导读 Session 14:ENVISION: A 0.26-to-10 TOPS/W Subword-Parallel DVAFS CNN Processor in 28nm
    ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine
    ISSCC 2017论文导读 Session 14 Deep Learning Processors,DNPU: An 8.1TOPS/W Reconfigurable CNN-RNN
    ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network
    深度学习方法(九):自然语言处理中的Attention Model注意力模型
    深度学习方法(八):自然语言处理中的Encoder-Decoder模型,基本Sequence to Sequence模型
    720P、1080P、4K是什么意思?
    《微微一笑很倾城》中肖奈大神说的平方根倒数速算法是什么鬼?三十分钟理解!
    转载为什么写技术博客对新人如此重要
    三十分钟理解博弈论“纳什均衡” -- Nash Equilibrium
  • 原文地址:https://www.cnblogs.com/chenzheng8975/p/9579901.html
Copyright © 2011-2022 走看看