我有一个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时,服务器端没有收到任何信息。我错过了什么。感谢
答案 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)
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 +");
}