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