0

我有一个与套接字服务器交互的 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”或类似的数字。任何想法将这些代码转换为相应的字符?

4

2 回答 2

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);   
}
于 2013-04-17T06:35:31.703 回答
1

文件结束意味着没有足够的数据可供读取。

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

而且您还试图读取空的“流”ByteArray。

于 2013-04-09T14:48:41.840 回答