与C应用程序的Http通信

时间:2013-07-16 06:33:30

标签: flex sockets air flex3

我有一个C程序,它运行一个Web服务器。我有一个Air Application,我想使用Air Application与该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 +");
    }

套接字成功连接并触发其连接事件。但是当我尝试请求连接url时,服务器端没有收到任何信息。我错过了什么。感谢

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

我犯了一个错误。我没有在Get String中添加HTTP版本和字符串终止符。这就是为什么我没有在服务器端收到任何打印。因为请求无效。我发布了工作代码。谢谢你的帮助。

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 HTTP/1.0\r\n\r\n", "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 +");
    }