1

我正在为 Android 构建一个简单的 websocket 服务器。(让我们说 3.2 - 我尝试了一些早期的 Android 版本,结果相同)。在 Android 上尝试代码之前,我在 Windows、Linux 上的 Java SE 下对其进行了测试。它适用于 Chrome 和 Firefox 。但是在Android上它不起作用。请查看代码中的注释。

简而言之:

  1. 我成功通过握手,浏览器确认连接正常。
  2. 我很高兴通过 Websocket 收到来自浏览器的所有消息
  3. 我不能发送任何东西:它只是没有到达 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){}
 }
}

谢谢

4

2 回答 2

0

你在哪里运行这段代码?在 Activity 或 Service 中。

请注意,如果您需要创建一个自定义的 Web 服务器并需要在 Android 上运行它,您应该将其实现为在其自己的线程上运行的服务。

如果您根据android版本在Activity上运行它,主线程不应该(或不能,取决于android版本)在主线程上执行I/O操作。

我希望它有所帮助。

于 2012-06-10T05:14:44.740 回答
0

我解决了。原因是在 Android 的情况下,我之前通过相同的连接发送了一些东西。这个“东西”虽然是错误的,但不知何故在 Chrome/Firefox 中没有产生任何错误。我花了两天时间对两种情况下的 Wireshark 结果进行逐字节比较:我的 Sun Java Websocket Server 和我的 Android Websocket Server。

于 2012-06-11T03:57:04.917 回答