【问题标题】:ProgressEvent.SOCKET_DATA does not fire for 60 seconds?ProgressEvent.SOCKET_DATA 不触发 60 秒?
【发布时间】:2014-09-22 06:55:23
【问题描述】:

我正在尝试将我的 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 秒,对吧?

【问题讨论】:

    标签: php actionscript-3 sockets tcp


    【解决方案1】:

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

    socket.writeUTF("Foo\n");
    

    代替:

    socket.writeUTF("Foo");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      相关资源
      最近更新 更多