2013-04-09 5 views
0

소켓 서버와 상호 작용하는 플래시 AS3 파일이 있는데 서버는 일반 텍스트로 데이터를 보냅니다. Socket 클래스를 사용하여 서버에서 보내고있는 데이터를 읽을 수 없습니다. 플래시에서 사용하는 코드는 다음과 같습니다.소켓에서 데이터를 읽을 수 없습니다.

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() 

저는 다양한 조합을 시도해 성공하지 못했습니다. 문제를 이해하고 수정 사항을 찾는 데 도움이되는 단서는 감사하게 생각합니다.

업데이트 :

내가

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"또는 숫자의 유사한 무리로 추적을 얻을에 @t에 의해 주어진 코드를 수정했습니다. 이 코드를 각각의 문자로 변환 할 생각은 없습니까?

답변

1

마침내 작동했습니다. 도움을 주신 모든 분들께 감사드립니다. 아래 코드는 저에게 효과적입니다.

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); 
} 
+0

'socket.writeBytes (stream, 0, 0);'라인은 아무 쓸모가 없다. 아무 것도 보내지 않는다. 처음부터 아무 것도 보내지 않았기 때문에 서버에서 데이터를 가져 오지 못하는 것일 수 있습니다. (그것은 어떤 종류의 서버인지에 달려있다). – SSpoke

1

파일 끝은 읽을 수있는 충분한 데이터가 없다는 것을 의미합니다.

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

그리고 당신은 또한 빈 "스트림"이 ByteArray 읽기 위해 노력하고 있습니다.

+0

ByteArray는 비어 있지 않습니다. 이미 확인했습니다. 또한이 코드는 동일한 오류를 발생시킵니다. 바이트와 ​​ByteArray에 대해 더 공부해야 할 필요가있을 것입니다. 감사합니다 Taanielo !! –

관련 문제