Я пытаюсь установить связь, используя этот протокол.Он отлично работает, за исключением случаев, когда сокет имеет много данных для возврата.Прямо сейчас я проверяю, заканчивается ли пакет на \ r \ n, чтобы определить, получил ли я все пакеты.Проблема в том, что иногда пакет может заканчиваться на \ r \ n разрывом строки, даже если это не последний пакет, поэтому я не могу его использовать.
Я использую очередь команд, потому что хочудождитесь полного ответа, прежде чем отправлять следующую команду.
Код с удаленным ненужным материалом:
class CustomSocket extends Socket
{
private var _response:String;
private var _commandQueue:Array;
public function CustomSocket()
{
super();
this.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function socketDataHandler(event:ProgressEvent):void
{
readResponse();
}
private function readResponse():void {
var str:String = this.readUTFBytes(bytesAvailable);
_response += str;
//BUG: I cannot use this check for determining the end of packets, need to find a new one
if (_response.charAt(_response.length - 1) == "\n" && _response.charAt(_response.length - 2) == "\r")
{
//dispatch the result
commandFinished();
}
}
//writes to the socket
private function sendRequest(request:String):void
{
_response = "";
this. writeln(request);
flush();
writeln("\r\n");
flush();
}
private function writeln(str:String):void
{
try
{
this.writeUTFBytes(str);
}
catch (e:IOError)
{
trace(e);
}
}
private function addCommand():void
{
//adds a command to the queue and executes it
}
private function commandFinished():void
{
//remove executed command and check if there is more commands in the queue to execute
}
}
Проблема в функции readResponse.Я много гуглил, не находя ничего интересного.
Есть ли способ узнать общее количество байтов / пакетов, возвращаемых сокетом?Или способ обнаружить EOF или что пакет последний?