温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-05-26 05:58:52 来源:网络 阅读:645 作者:wkp111 栏目:移动开发

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

作用讲解

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

集成方式

  • Jar包下载SocketSimple.jar
  • Maven中央仓库http://search.maven.org/搜索 SocketSimple
    Note:使用时版本请以Github为准。

代码示例

/**
 * 服务端测试类
 */
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。大家如果有更好的意见或建议以及好的灵感,请邮箱作者,谢谢!

  • qqEmail :1535514884@qq.com

  • gmail :wkp15889686524@gmail.com

  • 163Email:15889686524@163.com
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI