ProgressEvent.SOCKET_DATA不会触发60秒?

时间:2014-07-30 14:56:42

标签: php actionscript-3 sockets tcp

我正在尝试将我的Flash游戏连接到TCP服务器,该服务器托管在我自己的机器上(用于开发目的)。我已经用PHP成功创建了一个TCP流:

<?php
$port=<some number>;
$server=<some local vhost>;
$socket=@stream_socket_server("tcp://$server:$port", $errno, $errstr);
$conn = stream_socket_accept($socket);
while($conn){
  $foo=fgets($conn);
  fwrite($conn, $foo);
}

这是我写的Actionscript代码:

// import statements not included
public var socket:Socket=new Socket;
public var server:String="HIDDEN";
public var port:uint=HIDDEN;
public function connectSocket():void
{
  socket.connect(server,port);
  socket.addEventListener(ProgressEvent.SOCKET_DATA,onSocketData);
  socket.addEventListener(Event.CONNECT,onSocketConnect);
}
public function onSocketConnect(event:Event):void
{
  trace("CONNECT at "+new Date().toUTCString());
  socket.writeUTF("Foo");socket.flush();
}
public function onSocketData(event:ProgressEvent):void
{
  trace("PROGRESSEVENT at "+new Date().toUTCString());
  trace("RESPONSE FROM SEVER: "+socket.readUTF()+" at "+new Date().toUTCString());
}

然而,在运行中我得到:

[trace] CONNECT at Wed Jul 30 14:54:27 2014 UTC
[trace] PROGRESSEVENT at Wed Jul 30 14:55:27 2014 UTC
[trace] RESPONSE FROM SEVER: Foo at Wed Jul 30 14:55:27 2014 UTC

它通常是60秒,但是一次或两次多一点。服务器托管在我自己的机器上,连接到我自己的机器不需要60秒,对吗?

1 个答案:

答案 0 :(得分:0)

消息需要以换行符(\ n)结束才能正确刷新。所以代码中的行应该是:

socket.writeUTF("Foo\n");

而不是:

socket.writeUTF("Foo");