Просмотр полной версии : Socket. Как передать длинную строку
mihael_p
16.01.2016, 23:58
Добрый день! Столкнулся с проблемой передачи по сокету длинных строк ( 10 000, 20 000 ). Отправляю так:
socket.writeUTF(JSON.stringify(obj));
принимаю так:
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
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();
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 байт.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.