我正在为Android构建一个简单的websocket服务器。 (让我们说,3.2 - 我尝试了一些早期的Android版本,结果相同)。在Android上尝试代码之前,我在Windows,Linux上的Java SE下进行了测试。它可以与Chrome和Firefox一起工作。 但是在Android上它不起作用。请参阅代码中的评论。安卓系统的websocket服务器,java
简而言之:
- 我顺利通过握手和浏览器确认连接正常。
- 我很高兴地通过Websocket接收来自浏览器的所有消息我不能发送任何东西:它只是没有得到JavaScript回调。 经过一些重试(有时立即)浏览器关闭websocket。
下面是代码:
//BufferedOutput myout=new BufferedOutput(mysocket.getOutputStream()));
//myout was successfully used for handshaking before
String msg=”I want to send this”;
try {
myout.write(129);//129=0x81); text frame 0x81=129
int payloadlen=msg.length();
myout.write(payloadlen);
byte[] bts=msg.getBytes(Charset.forName("UTF-8"));
myout.write(bts,0,payloadlen);
myout.flush();//after this command client Browser closes websocket
//firefox also gives error
}
catch(IOException ee)
{
System.out.println("Error sending websocket message"+ee);
try{myclose();}catch(IOException eio){}
}
}
谢谢
谢谢。我在Activity和Inside服务中都尝试过,结果相同。在这两种情况下,代码都不在主线程中运行。我确实有我的自定义Web服务器,它响应握手。握手成功,我可以使用相同的连接从Web浏览器(Firefox/Chrome)接收短信(通过websocket)。但是我无法发送任何东西。它看起来像我发送信号到Web浏览器关闭连接。我在Sun Java(Windows/Linux)下运行代码时不会发生这种情况。 – user1446828
还有更多:我刚刚用wireshark检查过,在这两种情况下(Sun Java和Android),我的服务器都发送相同的数据包。神秘。 – user1446828