Тема: С++ Sockets
Показать сообщение отдельно
Старый 17.11.2015, 12:31   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: С++ Sockets

Сообщение от Жека Посмотреть сообщение
Почему TCP не гарантирует доставку?
читай внимательнее:
Сообщение от impersonalis Посмотреть сообщение
при асинхронном сокете tcp (и, надо полагать, udp - не работал с ним)
и да - он гарантированно доставит то, что он отметил (путём указания длины в возвращаемом значении) как отправленное. Синхронный заблокирует вызывающий поток до конца отправки всего буфера. Для большого количества приложений это очень неудобно.
Суть такова: ты хочешь отправить команду "12345". Но в момент отправки сеть едва скрипит, поэтому за малое время, выделенное на отправку, уходит только "123", и функция возвращает тебе число 3, как индикатор количества отправленных байт. Очень часто, это число никто не проверяет (ограничиваясь только проверкой на отсутствие сбоя), считая что асинхронный сокет будет сам как-то выкручиваться и отправлять оставшееся "45". НЕТ. При следующем вызове надо будет отправить* "45" ещё раз. И опять убедиться - что отправилось.

Про контроль прочитанного мы знаем ещё по блитцу. В общем-то никто не гарантирует какими порциями информация будет уходить по сети. Как правило, происходит некая аккумуляция данных, чтобы не забивать сетку маленькими пакетами. Но при необходимости, это можно изменить. Но это отдельная большая тема.
Я бы не советовал в общем случае привязываться к разделителю строк. Сепаратор надо выбирать исходя из передаваемого контента. Возможно, его получится сделать более коротким, или наоборот - проще сделать подлиннее (например, исходя из больших размеров "строки").
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
St_AnGer (17.11.2015), Жека (17.11.2015)