进阶版socket

2019-10-23  本文已影响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) {
            }
        }
    }

    
}

上一篇下一篇

猜你喜欢

热点阅读