本文用SocketIOServer模拟服务端,用Socket IO模拟客户端实现了端到端通信。以下是代码示例:
服务端代码
import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.Configuration;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.ConnectListener;
import com.corundumstudio.socketio.listener.DataListener;
import com.corundumstudio.socketio.listener.DisconnectListener;
import org.testng.annotations.Test;
import java.util.UUID;
public class SocketServerTest {
@Test
public void serverTest() {
Configuration config = new Configuration();
config.setHostname("localhost");
config.setPort(9092);
SocketIOServer server = new SocketIOServer(config);
server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient client) {//客户端建立连接的时候触发
UUID clientId = client.getSessionId();
System.out.println("Client " + clientId + " connected");
}
});
server.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient client) {//客户端断开连接的时候触发
UUID clientId = client.getSessionId();
System.out.println("Client " + clientId + " disconnected");
}
});
server.addEventListener("message", String.class, new DataListener<String>() {
@Override
public void onData(SocketIOClient client, String data, AckRequest ackRequest) {
UUID clientId = client.getSessionId();
System.out.println("Received message from client " + clientId + ": " + data);
client.sendEvent("message", "Server received message: " + data);//会触发客户端的socket.on("message",...)
}
});
server.start();
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (Exception e) {
e.printStackTrace();
}
server.stop();
}
}
客户端代码
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
import org.testng.annotations.Test;
public class SocketClientTest {
@Test
public void clientTest() {
try {
Socket socket = null;
socket = IO.socket("http://localhost:9092");
Socket finalSocket = socket;
//建立连接成功后会触发
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("Connected to server");
finalSocket.emit("message", "Hello from client");
}
});
socket.on("message", new Emitter.Listener() {
@Override
public void call(Object... args) {
String message = (String) args[0];
System.out.println("Received message from server: " + message);
}
});
socket.on(Socket.EVENT_CONNECT_ERROR, new Emitter.Listener() {
@Override
public void call(Object... args) {
Exception e = (Exception) args[0];
System.out.println("Failed to connect to server: " + e.getMessage());
}
});
socket.connect();
Thread.sleep(Integer.MAX_VALUE);
}
catch (Exception e) {
e.printStackTrace();
}
}
}