2011-09-18 11 views
1

私は、ソケットを介してJavaプロセスと通信したいと思うSWFを書いています。これは通常、標準のソケットでは非常に簡単ですが、なんらかの理由で、Socketのマニュアルに記載されているイベントは、すべての兆候があると言われても発砲しません。Actionscriptソケットイベントが発生しませんか?

Java側では、ポート8080でリッスンしているServerSocketを設定しました.netcatを使用すると、正常に動作することが確認されました。フラッシュ側で

、しかし、私は、ドキュメントに per the examplesを設定している:私は、結果のSWFを実行すると、私はされ得るすべての「と呼ばれる接続!」

public function connectToPort(port : int):void 
{ 
    m_socket = new Socket(); 

    addEventListener(Event.CLOSE, onClose); 
    addEventListener(Event.CONNECT, onConnect); 
    addEventListener(IOErrorEvent.IO_ERROR, onIoError); 
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
    addEventListener(ProgressEvent.SOCKET_DATA, onData); 

    m_socket.connect("localhost", port); 

    // trace() doens't work for the command-line :(
    m_debug.text = "Called connect!"; 
} 

ステージではのイベントは一度も発生しません。さらに奇妙なことに、Javaの終わりでServerSocketからの通信を調べると、接続を受け取り、受け入れます。 SWFを閉じると、サーバーを呼び出すコードが正常に完了します。つまり、SWFとの接続時にハングしていました。私はいくつかの質問が残ってる

...イベントハンドラの例外を除いて

  • が、これは(接続が確立された後、私たちはイベントを待つ私のコードのための制御の終わりですそれらを適切にレンダリングする)。プログラム全体が「終了」していて、ランタイムモデルについて誤解されていますか?
  • 呼び出されるコールバックの可視性/命名要件はありますか?彼らはすべて公開されていますが、ランタイムがそれらを見ていない可能性がありますか?
  • AS3ソケットプログラミングに問題がありますか?私はこれがサンドボックスなどの問題だと考え続けましたが、SECURITY_ERRORはどちらも起動しませんでした。

私はこの日のほとんどを過ごしました。非常に私は基本的なソケット通信を動作させることができないという不満があります。 -/

+0

に追加するにはいないm_socket

addEventListener(Event.CLOSE, onClose); addEventListener(Event.CONNECT, onConnect); addEventListener(IOErrorEvent.IO_ERROR, onIoError); addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); addEventListener(ProgressEvent.SOCKET_DATA, onData); 

thisにイベントリスナーを追加しますスタンドアローンプレーヤーをデバッグします。私はブラウザから実行すると、Java側は接続を受け取りません... –

+1

いいえ、あなたのプログラムはここで終了する必要はありません、静かにイベントを待つ必要があります。 いいえ、特別な命名要件はありません。 SWFが信頼されていない限り、ソケットサーバーがポリシーファイルの応答を提供しない場合は、セキュリティエラーが発生するはずです。 –

答えて

2

"this"オブジェクトにイベントリスナーを追加していて、ソケットではないようです。

m_socket.addEventListener(Event.CLOSE, onClose); 
m_socket.addEventListener(Event.CONNECT, onConnect); 
m_socket.addEventListener(IOErrorEvent.IO_ERROR, onIoError); 
m_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
m_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData); 

そして、あなたは、ソケットのイベントを見始める必要があります。

は、このしてみてください。

+0

これは、ありがとうJoe^_ ^ –

0

これらの行は、それが助け場合、私はFlashで私のデバッグのほとんどをやってるm_socket使用

with(m_socket) { 
    addEventListener(Event.CLOSE, onClose); 
    addEventListener(Event.CONNECT, onConnect); 
    addEventListener(IOErrorEvent.IO_ERROR, onIoError); 
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
    addEventListener(ProgressEvent.SOCKET_DATA, onData); 
} 
関連する問題