Java实现IP/TCP通信帮助类SocketSimple

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现IP/TCP通信帮助类SocketSimple相关的知识,希望对你有一定的参考价值。

新春伊始,上班码代码,看了一下自己年前的总结,发现有一个Socket通信的帮助库SocketSimple,今天就介绍一下该库的作用。

作用讲解

SocketSimple库主要是对Socket服务端实现及Socket客户端实现的封装,服务端由ServerHelper管理,客户端由ClientHelper管理;通信均采用回调模式,主要有异常回调、连接回调、消息接收回调、消息发出回调等;内部多线程并发,消息接收在独立线程,支持长连接,支持多服务端、多客户端创建等。

集成方式

代码示例

/**
 * 服务端测试类
 */
public class Test {
    private static Set<String> addresses = new HashSet<String>();
    public static void main(String[] args) {
        //创建服务器
        final ServerHelper helper = ServerHelper.getInstance(true);
        helper.createServer(9988, new ServerCallBack() {
            //异常回调
            @Override
            public void onError(Throwable error) {

            }

            //客户端连接回调
            @Override
            public void onAccept(String address) {
                addresses.add(address);
            }

            //收到客户端消息回调
            @Override
            public void onReceived(String address, byte[] result) {
                String x = new String(result);
                Iterator<String> iterator = addresses.iterator();
                while (iterator.hasNext()) {
                    String next = iterator.next();
                    if (!next.equals(address)) {
                        System.out.println(x);
                        System.out.println(next);
                        //向客户端发送消息
                        helper.send(9988,next,result);
                    }
                }
            }

            //向客户端发送成功回调
            @Override
            public void onSent(String address, byte[] data) {
                System.out.println(new String(data));
            }
        });
    }
}

/**
 * 客户端1测试类
 */
public class Test1 {
    public static void main(String[] args) {
        //创建客户端1
        final ClientHelper helper = ClientHelper.getInstance(true);
        helper.createClient("192.168.1.114", 9988, new ClientCallBack() {
            //异常回调
            @Override
            public void onError(Throwable e) {

            }

            //连接服务器回调
            @Override
            public void onConnected(final String address, final int port) {
                //开线程获取键盘录入(注意:因为键盘录入会堵塞线程,所以当直接在该方法使用时会导致该方法所在线程堵塞)
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Scanner scanner = new Scanner(System.in);
                        while (scanner.hasNextLine()) {
                            String s = scanner.nextLine();
                            if (s.equals("exit")) {
                                //关闭客户端
                                helper.closeClient(address,port);
                                //回收资源
                                helper.recycle();
                                return;
                            }
                            //向服务器发送消息
                            helper.send(address,port,s.getBytes());
                        }
                    }
                }).start();
            }

            //接收服务器消息回调
            @Override
            public void onReceived(String address, int port, byte[] result) {
                System.out.println("Client1-Received: " + (new String(result)));
            }

            //发送服务器消息成功回调
            @Override
            public void onSent(String address, int port, byte[] data) {
                String s = new String(data);
                System.out.println("Client1-Sent: " + s);
            }
        });
    }
}

/**
 * 客户端2测试类
 */
public class Test2 {
    public static void main(String[] args) {
        //创建客户端2
        final ClientHelper helper = ClientHelper.getInstance(false);
        helper.createClient("127.0.0.1", 9988, new ClientCallBack() {
            //异常回调
            @Override
            public void onError(Throwable e) {

            }

            //连接服务端回调
            @Override
            public void onConnected(final String address, final int port) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        Scanner scanner = new Scanner(System.in);
                        while (scanner.hasNextLine()) {
                            String s = scanner.nextLine();
                            if (s.equals("exit")) {
                                helper.closeClient(address,port);
                                helper.recycle();
                                return;
                            }
                            //向服务端发送消息
                            helper.send(address,port,s.getBytes());
                        }
                    }
                }).start();
            }

            //接收服务端消息回调
            @Override
            public void onReceived(String address, int port, byte[] result) {
                System.out.println("Client2-Received: " + (new String(result)));
            }

            //向服务端发送成功回调
            @Override
            public void onSent(String address, int port, byte[] data) {
                System.out.println("Client2-Sent: " + (new String(data)));
            }
        });}
}

Note:服务端处理两个客户端的聊天信息,两个客户端聊天示例。

结语

欢迎大家集成使用,如果对源码感兴趣,请移步Github地址,若感觉好用,请给个Star鼓励一下,使用中遇到问题请留下issues。大家如果有更好的意见或建议以及好的灵感,请邮箱作者,谢谢!

以上是关于Java实现IP/TCP通信帮助类SocketSimple的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP

《图解TCP/IP》--TCP/IP协议分层模型与通信

TCP/IP

Ip/TCP协议简介

JAVA基础-网络编程

第67天python学习基于tcp实例化实现远程执行命令