博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个简单的支持多并发的socket服务/客户端
阅读量:6039 次
发布时间:2019-06-20

本文共 3838 字,大约阅读时间需要 12 分钟。

图片描述

代码实战

ServerBoot启动类

package com.example.demo.server;/** * @author  MySelf * @create  2018/9/29 * @desc 服务启动类 **/public class ServerBoot {    private static final int PORT = 8000;    /**     * 启动Server类线程     * @param args     */    public static void main(String[] args) {        Server server = new Server(PORT);        server.start();    }}

Server监听端口服务类

package com.example.demo.server;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * @author  MySelf * @create  2018/9/29 * @desc Server监听端口主服务 **/public class Server {    private ServerSocket serverSocket;    /**     * 监听端口     * @param port     */    public Server(int port){        try {            this.serverSocket = new ServerSocket(port);            System.out.println("服务端启动成功,端口:"+port);        }catch (IOException e){            System.out.println("服务端启动失败");        }    }    /**     * 线程模式,防止注释     */    public void start(){        new Thread(new Runnable() {            @Override            public void run() {                doStart();            }        }).start();    }    /**     * 启动客户端接受     */    private void doStart() {        while (true){            try {                Socket client = serverSocket.accept();                new ClientHandler(client).start();            }catch (IOException e){                System.out.println("服务端异常");            }        }    }}

ClientHandler客户端接入监听类

package com.example.demo.server;import java.io.IOException;import java.io.InputStream;import java.net.Socket;/** * @author  MySelf * @create  2018/9/29 * @desc 客户端接入监听类 **/public class ClientHandler {    /** 数据连接值 */    public static final int MAX_DATA_LEN = 1024;    private final Socket socket;    public ClientHandler(Socket socket){        this.socket = socket;    }    public void start(){        System.out.println("新客户端接入");        new Thread(new Runnable() {            @Override            public void run() {                doStart();            }        }).start();    }    /**     * 对客户端的业务处理,接收并重写回去     */    private void doStart(){        try {            InputStream 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();        }    }}

Client客户端启动类

package com.example.demo.client;import java.io.IOException;import java.net.Socket;/** * @author  MySelf * @create  2018/9/29 * @desc 客户端启动类 **/public class Client {    private static final String HOST = "127.0.0.1";    private static final int PORT = 8000;    private static final int SLEEP_TIME = 5000;    public static void main(String[] args) throws IOException {        final Socket socket = new Socket(HOST,PORT);        /**         * 客户端启动,定时向服务端发送数据         */        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("客户端启动成功!");                while (true){                    try {                        String message = "hello world";                        System.out.println("客户端发送数据:"+message);                        socket.getOutputStream().write(message.getBytes());                    }catch (Exception e){                        System.out.println("写数据出错!");                    }                    sleep();                }            }        }).start();    }    private static void sleep() {        try {            Thread.sleep(SLEEP_TIME);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

相关实战

GitHub项目:


如果本文对你有所帮助,欢迎关注技术公众号。

图片描述

转载地址:http://zplhx.baihongyu.com/

你可能感兴趣的文章
【树莓派】树莓派网络配置:静态IP、无线网络、服务等
查看>>
JavaScript——双向链表实现
查看>>
抽象类和借口的区别
查看>>
WebConfig配置文件详解
查看>>
nginx的location root 指令
查看>>
zDiaLog弹出层
查看>>
linux不常用但很有用的命令(持续完善)
查看>>
NFine常见错误
查看>>
zabbix报警媒介------>微信报警
查看>>
使用视图的好处
查看>>
面向开发运维的10款开源工具
查看>>
MVC ---- 增删改成 EF6
查看>>
linux 下 php 安装 pthreads
查看>>
Spring Boot学习笔记
查看>>
python3存入redis是bytes
查看>>
laravel 集合接口
查看>>
C/C++二进制读写png文件
查看>>
thymleaf 常用th 标签
查看>>
RTB 广告系统
查看>>
Linux signal 那些事儿(2)【转】
查看>>