0

Web サーバーを実行する C プログラムがあります。Air アプリケーションがあり、Air アプリケーションを使用してその Web サーバーと通信したいと考えています。ソケット オブジェクトを作成し、次の操作を行います。

public function httpTest():void
    {      
      sock.addEventListener(Event.CONNECT, onConnect);
      sock.addEventListener(ProgressEvent.SOCKET_DATA, onDataRecv);
      sock.addEventListener(IOErrorEvent.IO_ERROR, onError);
      try
      {
        trace("Connecting...");
        sock.connect("127.0.0.1", 9800);            
        sock.writeMultiByte("GET /Connection?data=version", "us-ascii");
        sock.flush();
      }
      catch(err:Error)
      {
        trace(err.message);
      }
    }

    public function onConnect(event:Event):void
    {
      trace("onConnect +");
    }

    public function onDataRecv(event:ProgressEvent):void
    {
      trace("onDataRecv +");
    }

    public function onError(event:Event):void
    {
      trace("onError +");
    }

socket が正常に接続され、その接続イベントが発生します。しかし、接続URLをリクエストしようとすると、サーバー側では何も受信されません。私は何かが欠けていますか?ありがとう

4

2 に答える 2

2

Flex のネットワーキングに関するほぼすべてのことと同様に、socket.connectは非同期でノンブロッキングです。つまり、sock.connectがエラーなしで返されたからといって、ソケットがまだ実際に使用できる状態にあるとは限りません。trace(sock.connected)呼び出しの後に元のコードを入力すると、 が出力されると思われwriteMultiByteますfalse

ハンドラーが起動sock.writeMultiByteするまでではなく、接続の準備が整うまで呼び出しを遅らせる必要があります。onConnect試す:

try
{
    trace("Connecting...");
    sock.connect("127.0.0.1", 9800);            
}
catch(err:Error)
{
    trace(err.message);
}
...
public function onConnect(event:Event):void
{
  trace("onConnect +");
  sock.writeMultiByte("GET /Connection?data=version", "us-ascii");
  sock.flush();
}
于 2013-07-17T14:54:58.433 に答える