【websocket】为啥就是握手不成功呢?没看出问题来啊
tomcat服务器端:
处理websocket连接
处理websocket请求
xml配置
ws:ws = new WebSocket("ws://192.168.3.51/S2012150143/web");
tomcat中WEB-INF下lib中的jar包都删了
死活握手不成功!!!!!!
处理websocket连接
package websocket;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
public class WebSocketMessageServlet extends WebSocketServlet{
@Override
protected StreamInbound createWebSocketInbound(String arg0,
HttpServletRequest request) {
// TODO Auto-generated method stub
String username= (String)request.getSession().getAttribute("user_nickname");
System.out.println(username);
return new WebSocketMessageInboundPool(username);
}
} 处理websocket请求
package websocket;
import java.io.IOException;
import java.nio.CharBuffer;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.WsOutbound;
public class WebSocketMessageInboundPool extends MessageInbound{
private final String user_nickname;
private static final Map<String,WebSocketMessageInboundPool > Connections = new HashMap<String,WebSocketMessageInboundPool>();
public WebSocketMessageInboundPool(String username){
this.user_nickname=username;
}
protected void onOpen(WsOutbound outbound) {
// TODO Auto-generated method stub
addMessageInbound(this);
super.onOpen(outbound);
}
protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
// TODO Auto-generated method stub
// 向所有已连接的客户端发送文本消息
try {
//向特定的用户发送数据
WebSocketMessageInboundPool inbound = Connections.get(user_nickname);
if(inbound != null){
ByteBuffer bb = ByteBuffer.wrap(arg0.array());
WsOutbound wb = inbound.getWsOutbound();
wb.writeBinaryMessage(bb);
wb.flush();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
protected void onTextMessage(CharBuffer arg0) throws IOException {
// TODO Auto-generated method stub
try {
//向特定的用户发送数据
WebSocketMessageInboundPool inbound = Connections.get(user_nickname);
if(inbound != null){
CharBuffer cb = CharBuffer.wrap(arg0);
WsOutbound wb = inbound.getWsOutbound();
wb.writeTextMessage(cb);
wb.flush();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
protected void onClose(int status) {
// TODO Auto-generated method stub
removeMessageInbound(this);
super.onClose(status);
}
//向连接池中添加连接
public static void addMessageInbound(WebSocketMessageInboundPool inbound){
//添加连接
Connections.put(inbound.user_nickname, inbound);
}
public static void removeMessageInbound(WebSocketMessageInboundPool inbound){
//移除连接
Connections.remove(inbound.user_nickname);
}
}
xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<servlet-name>WebSocketMessageServlet</servlet-name>
<servlet-class>websocket.WebSocketMessageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WebSocketMessageServlet</servlet-name>
<url-pattern>/web</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
ws:ws = new WebSocket("ws://192.168.3.51/S2012150143/web");
tomcat中WEB-INF下lib中的jar包都删了
死活握手不成功!!!!!!
...全文
相关推荐
websocket c++服务器,浏览器握手成功
数据传输:一旦握手成功,就可以通过服务器对象的send方法发送WebSocket帧给客户端,或者通过on_message回调处理接收到的客户端消息。
Html5 WebSocket c++ 握手 库
如果你遇到任何问题,如编译错误或使用上的困惑,通常可以查看库的README文件或联系作者获取帮助。总的来说,WebSocket是一种强大的技术,用于实现高效、实时的双向通信。
Html5 WebSocket 基于c++ 的握手库
**错误处理**:WebSocket连接可能会遇到各种问题,如网络中断、数据包丢失等,需要编写健壮的错误处理代码,确保在出现问题时能够恢复或优雅关闭连接。4.
c# WebSocket服务端握手解包原理
本文介绍了一个简单的WebSocket服务器端实现,涵盖监听端口、客户端连接、握手、数据接收解析和发送数据等功能。服务器通过TCP套接字通信,并使用SHA1加密响应头。同时,提供了HTML页面和Jav
VB.net WebSocket 握手 封包 拆包
简单的WebSocket 握手 消息拆包 消息封包 方法


Web 开发
