Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с ServerSocket [D7, WinXP]


alexa14 ©   (2006-05-30 13:38:00) 

Пишу сервер под IChat. Появилась поблема: данные доходят до клиента через раз.
Делаю всё так:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 Len: integer;
begin
 Len := socket.ReceiveBuf(Buf,65384);
   ProcessData(buf,len); //отправляем на обработку
end;
procedure ProcessData(sData: array of char; Len: integer);
begin
//здесь разделяем склееные пакеты, расшифровываем сообщение
...........
//отправляем ответ клиенту
form1.ServerSocket1.Socket.Connections[x].SendBuf(sData,newLen);
end;
Что здесь может быть не то?
Может ServerSocket не успевает обрабатывать большое кол-во пакетов и некоторые из них теряются?


medved_68   (2006-05-31 09:27:00) [1]


> alexa14

Вообще то сервер точно должен знать какой объем данных передает клиент
Соответственно клиент должен следить сколько он отправил серверу и если SendBuf() вернет -1 значит надо повторить передачу этого блока ибо сокет занят Если не отслеживать процесс то на выходе на сервере получишь кашу
Соответственно если пользуешься SendBuf() продумай протокол типа размер блока-пауза-сам блок данных-(если нужно)-квитирование приема блока. И при передаче самого блока данных методом SendBuf() тоже надо отслеживать сколько ушло в сокет и делать поправку


Сергей М.   (2006-05-31 08:31:00) [2]


> Если я не ошибаюсь, она возвращает кол-во отправленных данных


Не нужно делать умозрительных заключений.
Следует внимательно прочитать справку и вникнуть в то что там написано.
Информация к размышлению - SendBuf() может вернуть -1 ....


alexa14   (2006-05-30 20:42:00) [3]

И ещё одна проблема появилась: не передаются последние 8 байт данных.


alexa14   (2006-05-30 18:08:00) [4]

Если я не ошибаюсь, она возвращает кол-во отправленных данных. Как мне это поможет определить причину того, что не доходят данные?


Сергей М.   (2006-05-30 16:33:00) [5]


> А что в коде неправильно?


То и неправильно, что ты игнорируешь это самое возвращаемое значение.
А ведь оно о многом говорит !


alexa14   (2006-05-30 14:15:00) [6]

функциональный возвращает значение. А что в коде неправильно?


Сергей М.   (2006-05-30 14:10:00) [7]

SendBuf() - это функциональныйметод.
Ты разницу между функциональным и процедурным методом понимаешь ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо