1. 程式人生 > >Java實現IP/TCP通信幫助類SocketSimple

Java實現IP/TCP通信幫助類SocketSimple

[] ofo create tar 中央倉庫 thread get 講解 llb

新春伊始,上班碼代碼,看了一下自己年前的總結,發現有一個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。大家如果有更好的意見或建議以及好的靈感,請郵箱作者,謝謝!

Java實現IP/TCP通信幫助類SocketSimple