当我从Java打开到websocket服务器应用程序的websocket连接时,服务器看到两个连接。第一个从不发送任何数据,第二个发送所有适当的报头,等等。有人知道这是什么原因吗?
客户端连接是:
var websocket = new WebSocket( "ws://192.168.1.19:3333/websession" );
在服务器端,在while循环中,我调用“serverSocket.accept()”,这会被调用两次。但其中一个从不发送任何数据(in.read()最终会超时而不返回任何数据)。
JAVA服务器代码
import java.net.*;
import java.io.*;
import java.security.*;
public class WebListener {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = null;
boolean listening = true;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening) new ServerThread(serverSocket.accept()).start();
serverSocket.close();
}
}
class ServerThread extends Thread {
private Socket socket = null;
public ServerThread(Socket socket) {
super("ServerThread");
this.socket = socket;
}
public void run() {
try {
OutputStream outStream = null;
PrintWriter out = new PrintWriter( outStream = socket.getOutputStream(), true);
BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream()));
String inputLine, outputLine;
//Handle the headers first
doHeaders( out, in );
// ..elided..
out.close();
in.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void doHeaders(PrintWriter out, BufferedReader in) throws Exception {
String inputLine = null;
String key = null;
//Read the headers
while ( ( inputLine = in.readLine() ) != null ) {
//Get the key
if ( inputLine.startsWith( "Sec-WebSocket-Key" ) )
key = inputLine.substring( "Sec-WebSocket-Key: ".length() );
//They're done
if ( inputLine.equals( "" ) ) break;
}
//We need a key to continue
if ( key == null ) throw new Exception( "No Sec-WebSocket-Key was passed!" );
//Send our headers
out.println( "HTTP/1.1 101 Web Socket Protocol Handshake\r" );
out.println( "Upgrade: websocket\r" );
out.println( "Connection: Upgrade\r" );
out.println( "Sec-WebSocket-Accept: " + createOK( key ) + "\r" );
out.println( "\r" );
}
public String createOK(String key) throws NoSuchAlgorithmException, UnsupportedEncodingException, Exception {
String uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
String text = key + uid;
MessageDigest md = MessageDigest.getInstance( "SHA-1" );
byte[] sha1hash = new byte[40];
md.update( text.getBytes("iso-8859-1"), 0, text.length());
sha1hash = md.digest();
return new String( base64( sha1hash ) );
}
public byte[] base64(byte[] bytes) throws Exception {
ByteArrayOutputStream out_bytes = new ByteArrayOutputStream();
OutputStream out = new Base64.OutputStream(out_bytes); //Using http://iharder.net/base64
out.write(bytes);
out.close();
return out_bytes.toByteArray();
}
private String convertToHex(byte[] data) {
StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfbyte = (data[i] >>> 4) & 0x0F;
int two_halfs = 0;
do {
if ((0 <= halfbyte) && (halfbyte <= 9))
buf.append((char) ('0' + halfbyte));
else
buf.append((char) ('a' + (halfbyte - 10)));
halfbyte = data[i] & 0x0F;
} while(two_halfs++ < 1);
}
return buf.toString();
}
}
这看起来是火狐的一个错误。在Chrome中,它只打开一个连接,而火狐15中的同一页面打开两个连接。
问题内容: 我很好奇为什么要尝试将2个客户端连接到RedisDB而不是1个?每次我连接时,都会看到另外两个客户端连接到我的RedisDB。 问题答案: 因为redis要求交互式命令和发布/订阅的单独连接。如果您不使用pub / sub,则可以告诉选项以禁用命令,在这种情况下,我 认为 第二个连接未建立。
我有一个这样描述的任务: 实现调用按钮: 当点击通话图标时,first Twilio会拨打电话号码#1(管理员) 这时我想出了如何通过浏览器拨打电话号码(比如管理员可以在浏览器中拨打提供商的电话)。 但是我找不到任何信息,如何通过Twilio相应地连接人们的任务。有什么方法可以实现这个解决方案吗?
问题内容: 我正在看下面的代码片段: 从这里:http : //howtonode.org/node-redis- fun 。 我不太了解发生了什么。从示例中,我认为Redis客户端是数据库和程序员之间的某种接口,但现在看来他们正在为每个提交的代码创建一个新客户端(他们在教程中构建的应用程序接受代码段)提交并将其存储在数据库中)! 另外,Redis数据库存储在哪里?与脚本位于同一目录中吗?我该如何
我试图创建一个简单的python聊天界面,但是当两个客户端连接到服务器时,第一个客户端控制台会尽快打印空白,并导致最大递归深度错误,而第二个客户端仍然可以正常工作。服务器代码只在非空时发送数据,所以我不确定它为什么会这样做。 服务器代码: 客户代码: 错误出现在客户机代码的第19行(接收和打印服务器发送的任何数据),如有任何帮助,将不胜感激。
问题内容: 我们最近开始开发Java桌面应用程序,并且管理部门要求我们使用Rich Client Platform。我知道Java有四个: Eclipse RCP- www链接到ecipse rcp, Netbean RCP- Netbeans RCP网站, Spring RCP- Spring Rich Client Valkyrie RCP- Valkyrie富客户端 任何人都没有任何经验,如
问题内容: 一切工作正常,但问题是当我在地图上定位时什么都没发生我注册了我的谷歌地图,我在这里做了所有说明 http://code.google.com/intl/pl/android/add-ons/google- apis/mapkey.html 我可以看到地图,可以放大和缩小,但是当我搜索位置时,会在logcat中找到它 这是我的Java代码 有什么帮助吗?提前致谢 问题答案: 如果您在AP