您好,登錄后才能下訂單哦!
新春伊始,上班碼代碼,看了一下自己年前的總結,發現有一個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。大家如果有更好的意見或建議以及好的靈感,請郵箱作者,謝謝!
qqEmail :1535514884@qq.com
gmail :wkp15889686524@gmail.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。