溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java實現(xiàn)IP/TCP通信幫助類SocketSimple

發(fā)布時間:2020-05-26 05:58:52 來源:網絡 閱讀:638 作者:wkp111 欄目:移動開發(fā)

新春伊始,上班碼代碼,看了一下自己年前的總結,發(fā)現(xiàn)有一個Socket通信的幫助庫SocketSimple,今天就介紹一下該庫的作用。

作用講解

SocketSimple庫主要是對Socket服務端實現(xiàn)及Socket客戶端實現(xiàn)的封裝,服務端由ServerHelper管理,客戶端由ClientHelper管理;通信均采用回調模式,主要有異?;卣{、連接回調、消息接收回調、消息發(fā)出回調等;內部多線程并發(fā),消息接收在獨立線程,支持長連接,支持多服務端、多客戶端創(chuàng)建等。

集成方式

  • 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) {
        //創(chuàng)建服務器
        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);
                        //向客戶端發(fā)送消息
                        helper.send(9988,next,result);
                    }
                }
            }

            //向客戶端發(fā)送成功回調
            @Override
            public void onSent(String address, byte[] data) {
                System.out.println(new String(data));
            }
        });
    }
}

/**
 * 客戶端1測試類
 */
public class Test1 {
    public static void main(String[] args) {
        //創(chuàng)建客戶端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;
                            }
                            //向服務器發(fā)送消息
                            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)));
            }

            //發(fā)送服務器消息成功回調
            @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) {
        //創(chuàng)建客戶端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;
                            }
                            //向服務端發(fā)送消息
                            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)));
            }

            //向服務端發(fā)送成功回調
            @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問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI