我正在使用websocket4j库,我看了一个关于如何在服务器应用程序中使用它的例子。我从那里获取了代码,并将其嵌入到当前使用原始套接字的项目中。无论我使用哪个客户端,我似乎都会得到一个IOExcpetion,表示握手失败。我不知道什么是错误的,因为我从示例服务器(显然应该可以工作)获取代码,并且我使用了一个JavaScript示例客户端来确保它不是客户端的错误。继承人的主要方法。握手失败的原因是什么?
public static void main(String args[]){
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
System.out.print("PORT (default - 1000): ");
int port=1000;
try{
port=Integer.parseInt(b.readLine());
}
catch(Exception e){
System.out.println("Wrong format. Using 1000 instead");
port=1000;
}
System.out.println("Server Started. Waiting for connections");
try{
WebServerSocket listener=new WebServerSocket(port);
while(true){
WebSocket server=listener.accept();
U413ChatServer connection=new U413ChatServer(server);
Thread t=new Thread(connection);
t.start();
}
}
catch(Exception e){ e.printStackTrace();
}
}
而且继承人什么来在屏幕上
Server Started. Waiting for connections
java.io.IOException: Handshake failed
at websocket4j.AbstractWebSocket.<init>(Unknown Source)
at websocket4j.server.WebSocket.<init>(Unknown Source)
at websocket4j.server.WebServerSocket.accept(Unknown Source)
at U413ChatServer.main(U413ChatServer.java:55)
Caused by: java.io.IOException: Unexpected header field: Sec-WebSocket-Key: yfOg
xCbblVyY8ARVFyMtOw==
at websocket4j.server.WebSocket.handshake(Unknown Source)
at websocket4j.AbstractWebSocket$HandshakeRunner.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:47
1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.lang.Thread.run(Thread.java:722)
55号线:
WebSocket server=listener.accept();
任何帮助将非常感激
根据堆栈跟踪,U413ChatServer.java的第55行调用'WebServerSocket.accept()'。这个例外似乎发生在这里。在WebSocket协议中需要头部'Sec-WebSocket-Key'。请参阅http://en.wikipedia.org/wiki/WebSocket#WebSocket_protocol_handshake。我不知道为什么这是意想不到的 – 2012-04-22 03:50:10
我已经发布了一个答案:客户端和服务器使用不同的Websocket Protokoll版本。除了使用不同的服务器实现或不同的客户端实现,没有其他方法。 – andih 2012-04-22 05:43:44