新春伊始,上班码代码,看了一下自己年前的总结,发现有一个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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。