1、Java-WebSocket
2、WebSocketClient + WebSocketServer基本用法
- 以下是WebSocket写的客户端和服务端,实现两者互相收发消息
- 服务端:WebSocketServer
package com.arthur;
import org.java_websocket.WebSocket;
import org.java_websocket.drafts.Draft;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.Collections;
public class MyWebSocketServer extends WebSocketServer {
public MyWebSocketServer(int port) throws UnknownHostException {
super(new InetSocketAddress(port));
System.out.println("MyWebSocketServer(int port) port = " + port);
}
public MyWebSocketServer(InetSocketAddress address) {
super(address);
System.out.println("MyWebSocketServer(InetSocketAddress address)");
}
public MyWebSocketServer(int port, Draft_6455 draft) {
super(new InetSocketAddress(port), Collections.<Draft>singletonList(draft));
System.out.println("MyWebSocketServer(int port, Draft_6455 draft) port = " + port);
}
@Override
public void onStart() {
System.out.println("onStart");
setConnectionLostTimeout(100);
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("onOpen : " + conn.getRemoteSocketAddress().getAddress().getHostAddress() + " entered the room!");
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("onMessage : " + conn.getRemoteSocketAddress().getAddress().getHostAddress() + " String = " + message);
}
@Override
public void onMessage(WebSocket conn, ByteBuffer message) {
System.out.println("onMessage : " + conn.getRemoteSocketAddress().getAddress().getHostAddress() + " ByteBuffer = " + message.toString());
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("onClose : " + conn.getRemoteSocketAddress().getAddress().getHostAddress()
+ " code = " + code
+ " reason = " + reason
+ " remote = " + remote);
}
@Override
public void onError(WebSocket conn, Exception ex) {
System.out.println("onError : " + conn.getRemoteSocketAddress().getAddress().getHostAddress()
+ " Exception = " + ex.toString());
}
public static void main(String[] args) throws InterruptedException, IOException {
int port = 8887;
MyWebSocketServer webSocketServer = new MyWebSocketServer(port);
webSocketServer.start();
System.out.println("MyWebSocketServer start");
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String in = sysin.readLine();
webSocketServer.broadcast(in);
webSocketServer.broadcast(in.getBytes());
if (in.equals("exit")) {
webSocketServer.stop(1000);
break;
}
}
}
}
package com.arthur;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.enums.ReadyState;
import org.java_websocket.handshake.ServerHandshake;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
public class MyWebSocketClient extends WebSocketClient {
public MyWebSocketClient(URI serverUri) {
super(serverUri);
System.out.println("MyWebSocketClient");
}
@Override
public void onOpen(ServerHandshake serverHandshake) {
System.out.println("onOpen: getContent = " + serverHandshake.getContent()
+ ", getHttpStatus = " + serverHandshake.getHttpStatus()
+ ", getHttpStatusMessage = " + serverHandshake.getHttpStatusMessage());
}
@Override
public void onMessage(String s) {
System.out.println("onMessage: String = " + s);
}
@Override
public void onMessage(ByteBuffer bytes) {
super.onMessage(bytes);
System.out.println("onMessage: ByteBuffer = " + bytes.toString());
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("onClose: code = " + code
+ ", reason = " + reason
+ ", remote = " + remote);
}
@Override
public void onError(Exception e) {
System.out.println("onError: " + e.toString());
}
public static void main(String[] args) throws IOException {
try {
MyWebSocketClient client = new MyWebSocketClient(new URI("ws://127.0.0.1:8887/"));
client.connect();
while (!client.getReadyState().equals(ReadyState.OPEN)) {
System.out.println("连接中···请稍后");
Thread.sleep(1000);
}
BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String in = sysin.readLine();
if (in.equals("exit")) {
client.close();
break;
}
client.send(in);
}
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
![image.png](https://img-blog.csdnimg.cn/img_convert/b0a983af4b47f46bfbe4e2d118d2b1f5.png#averageHue=#31302d&clientId=u1d72dd39-f596-4&from=paste&height=215&id=u8a0ef69f&originHeight=296&originWidth=1617&originalType=binary&ratio=1.375&rotation=0&showTitle=false&size=96110&status=done&style=none&taskId=uc4284d43-14c5-44a0-b619-14866108b3c&title=&width=1176)