The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"read склеивает сообщения которые читаются с сокета."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"read склеивает сообщения которые читаются с сокета."  
Сообщение от green (??) on 08-Мрт-08, 18:21 
Есть серверное приложение и клиентские приложения. Если на клиентском приложении подряд отправить несколько сообщений (send) 50 байт. То на сервере при получении сообщения (read)  читается сразу все 100 байт. Как сделать так чтобы read читал каждый раз только столько байт сколько в однома сообщении?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "read склеивает сообщения которые читаются с сокета."  
Сообщение от anonymous (??) on 08-Мрт-08, 19:28 
TCP -- потоково-ориентированный протокол.  Если хотите в потоке передавать дискретные "сообщения" -- делайте свою обвязку, например отправляйте сначала количество отправлямых байт, а потом само сообщение. На клиенте читаете размер, потом нужное число байт.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "read склеивает сообщения которые читаются с сокета."  
Сообщение от DeadMustdie email(??) on 09-Мрт-08, 19:16 
Вообще для обмена сообщениями поверх TCP всегда можно организовать прикладной протокол-обвертку. Например, перед каждым сообщением отправлять его длину, а при приеме сперва эту длину читать первым recv(), и затем принимать ровно столько октетов, сколько отправила другая сторона.

Чтение разумно организовать прерываемым, примерно по такому алгоритму:

while ( 1 ) {
  poll(); /* с таймаутом, + проверка на ошибки */
  if ( пора_закругляться )
    break;
  if ( есть_что_читать )
    recv(); /* + проверка на ошибки */
  if ( прочитано_сколько_запросили )
    break;
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру