tomcat服务器端:
处理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包都删了
死活握手不成功!!!!!!
------解决方案--------------------
和服务器版本有关系,这个tomcat服务器可能版本太低。