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

このコードはどこで実行していますか? アクティビティ内またはサービス内。

カスタマイズした 1 つの Web サーバーを作成し、それを Android で実行する必要がある場合は、独自のスレッドで実行されるサービスとして実装する必要があることに注意してください。

Android のバージョンに応じてアクティビティで実行している場合、メイン スレッドはメイン スレッドで I/O 操作を実行してはなりません (Android のバージョンによっては実行できません)。

お役に立てば幸いです。

于 2012-06-10T05:14:44.740 に答える
0

私はそれを解決しました。その理由は、Android の場合、SAME 接続を介して BEFORE を送信していたためです。そして、この「何か」は間違っていましたが、どういうわけかChrome / Firefoxでエラーを生成しませんでした。Sun Java Websocket Server と Android Websocket Server の両方のケースで Wireshark の結果をバイトごとに比較するのに 2 日かかりました。

于 2012-06-11T03:57:04.917 に答える