Java實現IP/TCP通信幫助類SocketSimple
阿新 • • 發佈:2018-02-23
[] ofo create tar 中央倉庫 thread get 講解 llb 新春伊始,上班碼代碼,看了一下自己年前的總結,發現有一個Socket通信的幫助庫SocketSimple,今天就介紹一下該庫的作用。
作用講解
SocketSimple庫主要是對Socket服務端實現及Socket客戶端實現的封裝,服務端由ServerHelper管理,客戶端由ClientHelper管理;通信均采用回調模式,主要有異常回調、連接回調、消息接收回調、消息發出回調等;內部多線程並發,消息接收在獨立線程,支持長連接,支持多服務端、多客戶端創建等。
集成方式
- Jar包下載SocketSimple.jar
- Maven中央倉庫http://search.maven.org/搜索 SocketSimple
代碼示例
/** * 服務端測試類 */ 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 :[email protected]
-
gmail :[email protected]
- 163Email:[email protected]
Java實現IP/TCP通信幫助類SocketSimple