无法从Socket读取数据

时间:2013-04-09 14:07:53

标签: actionscript-3 flash flash-builder

我有一个与套接字服务器交互的Flash AS3文件,服务器以纯文本形式发送数据。我无法读取使用Socket类从服务器发送的数据。我在flash中使用的代码如下所示。

var socket:Socket = new Socket("localhost", 9231);

socket.addEventListener(Event.CONNECT, socketConnectHandler, false, 0, true);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler, false, 0, true);

function socketConnectHandler(event:Event):void{
    trace("Connection has been established ");
}

function socketDataHandler(event:ProgressEvent):void{   
    var stream:ByteArray = new ByteArray();
    socket.writeBytes(stream, 0, 0);
    trace(stream.readUTF());
    trace( socket.readUTF());
}

当我尝试读取发送的ByteArray和套接字数据时,我得到以下错误。

Error: Error #2030: End of file was encountered.
    at flash.net::Socket/readUTF()
    at socket_test_fla::MainTimeline/socketDataHandler()

我尝试了各种组合,但没有成功。任何帮助我理解问题并找到解决方案的线索都会很感激。

更新

我将@t给出的代码修改为

var stream:ByteArray = new ByteArray();
socket.writeBytes(stream, 0, 0);

var data:String = "";
while(socket.bytesAvailable > 0) {
  data += socket.readByte();
}

trace("data "+ data);

我得到的痕迹是“0124661171161161111109579756184114117101124-1”或类似的一堆数字。有没有想过将这些代码转换为相应的字符?

2 个答案:

答案 0 :(得分:2)

最后,我得到了它...感谢大家的帮助。以下是适用于我的代码。

var socket:Socket = new Socket("localhost", 2553);

socket.addEventListener(Event.CONNECT, socketConnectHandler, false, 0, true);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler, false, 0, true);

function socketConnectHandler(event:Event):void{
    trace("Connection has been established ");
}

function socketDataHandler(event:ProgressEvent):void{   

    var stream:ByteArray = new ByteArray();
    socket.writeBytes(stream, 0, 0);

    var data:String = "";

    while(socket.bytesAvailable){
        data += socket.readUTFBytes(1);
    }   

    trace("data "+ data);   
}

答案 1 :(得分:1)

文件结尾表示没有足够的数据可供阅读。

var data:String = "";
while(socket.bytesAvailable > 0) {
    data += socket.readUTF();
}

你正试图读取空的“流”ByteArray。