2012-06-10 100 views
1

我正在为Android构建一个简单的websocket服务器。 (让我们说,3.2 - 我尝试了一些早期的Android版本,结果相同)。在Android上尝试代码之前,我在Windows,Linux上的Java SE下进行了测试。它可以与Chrome和Firefox一起工作。 但是在Android上它不起作用。请参阅代码中的评论。安卓系统的websocket服务器,java

简而言之:

  1. 我顺利通过握手和浏览器确认连接正常。
  2. 我很高兴地通过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){} 
} 
} 

谢谢

回答

0

你在哪里运行该代码?在活动或服务中。

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

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

我希望它有帮助。

+0

谢谢。我在Activity和Inside服务中都尝试过,结果相同。在这两种情况下,代码都不在主线程中运行。我确实有我的自定义Web服务器,它响应握手。握手成功,我可以使用相同的连接从Web浏览器(Firefox/Chrome)接收短信(通过websocket)。但是我无法发送任何东西。它看起来像我发送信号到Web浏览器关闭连接。我在Sun Java(Windows/Linux)下运行代码时不会发生这种情况。 – user1446828

+0

还有更多:我刚刚用wireshark检查过,在这两种情况下(Sun Java和Android),我的服务器都发送相同的数据包。神秘。 – user1446828

0

我解决了它。原因是,在Android的情况下,我通过相同的连接发送了一些东西。而这个“某些东西”虽然是错误的,但在某种程度上不会在Chrome/Firefox中产生任何错误。我花了两天时间和Wireshark的结果来比较两种情况:我的Sun Java Websocket Server和我的Android Websocket Server。