美文网首页Android知识程序员Android技术知识
Java实现IP/TCP通信帮助类SocketSimple

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

作者: wkp111 | 来源:发表于2018-02-22 15:56 被阅读0次

    新春伊始,上班码代码,看了一下自己年前的总结,发现有一个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

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