美文网首页
进阶版socket

进阶版socket

作者: 请叫我刚爷 | 来源:发表于2019-10-23 00:29 被阅读0次

    服务端接收不止一个客户端所以基础版socket已经不满足了。(基础版翻一下我的历史文档)以下暂时可以满足多客户端连接。

    package com.netty.socketDemo2;
    
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class SocketServer {
        
        public static void main(String[] args) throws UnsupportedEncodingException, IOException {
            // 第一步、创建ServerSocket对象,绑定监听端口
            int port = 6667;
            ServerSocket serverSocket = new ServerSocket(port);
            // 第二部、监听端口
            Socket client = null;
            while (true) {//此处是为了避免数据处理过程中异常,造成程序退出,毕竟服务端不可能出了问题手动处理
                try {
                    //accept()是一個阻塞方法,当有链接连接时才会创建
                    client = serverSocket.accept();
                    //创建一个线程去处理当前信息,否则无法接收下一个连接
                    new Thread(new ServerHandler(client)).start();;
                } catch (IOException e) {
                    System.out.println("服务端异常");
                }
            }
        }
        
    }
    
    
    package com.netty.socketDemo2;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.Socket;
    
    public class ServerHandler implements Runnable{
    
        public static final int MAX_DATA_LEN = 1024;
        private final Socket socket;
    
        public ServerHandler(Socket socket) {
            this.socket = socket;
        }
    
        @Override
        public void run() {
            doStart();
        }
        
        public void doStart() {
            InputStream inputStream = null;
            try {
                // 第三步、建立好连接后,通过输入流读取客户端发送的请求信息
                inputStream = socket.getInputStream();
                while (true) {
                    byte[] data = new byte[MAX_DATA_LEN];
                    int len;
                    while ((len = inputStream.read(data)) != -1) {
                        String message = new String(data, 0, len);
                        System.out.println("客户端传来消息: " + message);
                        // 第四部、通过输出流向客户端发送响应信息
                        socket.getOutputStream().write(data);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                //第五步关闭资源
                try {
                    inputStream.close();
                } catch (Exception e2) {
                }
                try {
                    socket.close();
                } catch (Exception e2) {
                }
            }
        }
    
        
    }
    
    

    相关文章

      网友评论

          本文标题:进阶版socket

          本文链接:https://www.haomeiwen.com/subject/nafhvctx.html