最近项目里需要在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("哈喽,连接一下啊"); } }