Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Socket. Как передать длинную строку (http://www.flasher.ru/forum/showthread.php?t=212314)

mihael_p 16.01.2016 23:58

Socket. Как передать длинную строку
 
Добрый день! Столкнулся с проблемой передачи по сокету длинных строк ( 10 000, 20 000 ). Отправляю так:
Код AS3:

socket.writeUTF(JSON.stringify(obj));

принимаю так:
Код AS3:

var str:String = "";
while(socket.bytesAvailable){
        str += socket.readUTFBytes(1);
        trace(str.length);
}

трейс дает ~8700 и приложение вылетает.
Подскажите как быть?

gloomyBrain 17.01.2016 02:40

Начтните с выяснения разницы между readUTF и readUTFBytes, затем то же для writeUTF и writeUTFBytes. И все сразу встанет на свои места ))

mihael_p 18.01.2016 15:30

Уважаемый, можете показать пример, как послать длинную строку и как принять ее правильно? Я много чего перепробовал, локально работает, а вот удаленно - нет. Буду очень признателен!

gloomyBrain 18.01.2016 17:42

Код AS3:

private var _sock:Socket = new Socket();
 
...
 
var str:String = "blah-blah-blah";
var len:uint = str.length;
 
_sock.writeUnsignedInt(len);
_sock.writeUTFBytes(str);
_sock.flush();

Код AS3:

private var _sock:Socket = new Socket();
private var _bytesToRead:uint = 0;
 
...
 
private function onSocketData(event:Event):void {
 
    var len:uint = _sock.readUnsignedInt();
    var str:String = _sock.readUTFBytes(len);
 
}

Только не забывайте проверять bytesAvailable, потому как по сети сообщения могут приходит блоками любого размера, независимо от того, какими блоками происходила отправка. Например, если было отправлено 100 байтов, прийти может три порции: 10 байтов, 89 байтов и 1 байт.


Часовой пояс GMT +4, время: 18:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.