Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 05.02.2012, 23:43   #1
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

supernewbie, мда уж... как обычно, идиотские ошибки основанные на идиотских мелочах. И че эт меня переклинило что размер пакета в одном байте храниться? Я уж думал тут инопланетяне замешаны в этих ошибках Спс большое )

Последний раз редактировалось Kilatif, 05.02.2012 в 23:46.
Kilatif вне форума   Ответить с цитированием
Старый 06.02.2012, 10:50   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Kilatif, интересно твои боты на других языках фрагментацию игровых пакетов тоже не учитывали? при малых размерах пакетов client.Receive будет читать весь пакет, но вот пакеты большего размера из за потоковой сути TCP будут разбиваться на порции и в момент вызова client.Receive могут быть ещё не полностью приняты компом, и client.Receive при этом считает только то количество которое было уже принято, эта функция не ждёт пока в буфере окажется столько байт сколько ты указал считать, считывается столько сколько пришло.
Я в аналоге пакетхака который пишу на шарпе с TCP соединением работаю как с потоком и в асинхронном режиме:
cpp Код:
public abstract class AbstractIOLayer     {         public Action onClose;         public Action<BinaryReader, int> onData;         protected ProxyConnection owner;         public AbstractIOLayer(ProxyConnection owner) { this.owner = owner; }         public abstract void SendData(byte&#91;] buf, int offset, int len);         public abstract void Close();         public abstract bool Actived { get; }         public abstract void BeginRead();     }     public class StreamContainer : AbstractIOLayer     {         private Stream _stream;         private const int _bufSize = 30000;         private readonly byte&#91;] _buf = new byte[_bufSize];         private BinaryReader _reader;         private bool _needRead; // true if need call BeginReceive in OnRecieve         private bool _opened = true;         public override bool Actived { get { return _opened; } }         public StreamContainer(Stream stream, ProxyConnection owner) : base(owner)         {             _reader = new BinaryReader(new MemoryStream(_buf));             _stream = stream;         }         public override void SendData(byte&#91;] buf, int offset, int len)         {             if (_opened) _stream.Write(buf, offset, len);         }         public override void Close()         {             if (_opened)             {                 _opened = false;                 _stream.Close();                 if (onClose != null) onClose();             }         }         public override void BeginRead()         {             _needRead = false; // if call in any layer don't call in OnRecieve             if (_opened) _stream.BeginRead(_buf, 0, _bufSize, OnRead, null);         }         private void OnRead(IAsyncResult r)         {             if (_opened) try             {                 _needRead = true;                 _reader.BaseStream.Position = 0;                 var l = 0;                 try { l = _stream.EndRead(r); }                 //catch (Exception e) { CoreLog.AddExpectedError(e, owner.GetNameWithDir(this)); }                 catch { Close(); return; }                 if (l > 0 && onData != null)                 {                     onData(_reader, l);                     if (_needRead) BeginRead();                 }                 else Close();             }             catch (Exception e) { CoreLog.AddError(e, owner.GetNameWithDir(this)); }         }     }
ЗЫ блин, когда же я пофикшу замену в подсветке синтаксиса символа "[" на "&#91 ;"...
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 06.02.2012 в 10:56.
xkor вне форума   Ответить с цитированием
Старый 06.02.2012, 14:16   #3
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

xkor, на других языках все было вполне нормально и никогда с этим проблем не возникало, хотя я задумывался над этим вопросом и у меня действительно никогда пакеты не дробились. Возможно это один из случаев, которые указал mira.
Kilatif вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!