最近项目里需要在Java服务端与c++进行websocket通信,java_websocket.client.WebSocketClient插件很好的解决了这个需求。
首先需要在pom.xml文件中引入此依赖:
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.5</version>
</dependency>
Java代码如下:
import org.apache.log4j.Logger;
import org.java_websocket.WebSocket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import com.cn.service.impl.SearchPersonServiceImpl;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
public class WebsocketClient {
private static Logger logger = Logger.getLogger(WebsocketClient.class);
public static WebSocketClient client;
public static void main(String[] args) {
try {
client = new WebSocketClient(new URI("ws://192.168.4.100:8080/project/websocket"),new Draft_6455()) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
logger.info("握手成功");
}
@Override
public void onMessage(String msg) {
logger.info("收到消息=========="+msg);
if(msg.equals("over")){
client.close();
}
}
@Override
public void onClose(int i, String s, boolean b) {
logger.info("链接已关闭");
}
@Override
public void onError(Exception e){
e.printStackTrace();
logger.info("发生错误已关闭");
}
};
} catch (URISyntaxException e) {
e.printStackTrace();
}
client.connect();
logger.info(client.getDraft());
while(!client.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
logger.info("正在连接...");
}
//连接成功,发送信息
client.send("哈喽,连接一下啊");
}
}