Предположим, что я подключен к кому-то, используя System.Net.Sockets.TcpClient. Я отправляю сообщение им, затем я сразу вызываю TcpClient.Close(); Получается ли другой клиент, чтобы получить сообщение? Кроме того, это правда/ложь в большинстве реализаций TCP?TCP - Отправка сообщения, затем отсоединение
ответ
Комментарий Влада - доставка не гарантируется.
Предположим, что установлено соединение TCP с одноранговым узлом. Операция отправки просто копирует данные в сетевой стек в операционной системе, и на нее отвечает ОС. Вы закрываете операцию вызова. ОС не перестает отправлять предыдущие данные. ОС откладывает закрытие сокета до отправки данных. Он прозрачен с точки зрения приложения.
Но что-то не так. Несовпадение может привести к сбою, может произойти сбой сети или что-то еще. Хотя ОС пытается повторно передать данные, если TCP ACK не получен, повторная передача может снова и снова прерываться, пока ОС не сдастся. Этот общий механизм во всех ОС реализует протокол TCP.
Если вам нужна гарантированная доставка, вам необходимо внедрить механизм уровня приложения для подтверждения принятых данных.
Вкратце - нет, это не гарантировано (кроме некоторых конкретных условий/использования) – Vlad
Из любопытства, почему TCP через UDP, если вы ищете сообщение о пожаре и забыть? – ColinM
@ColinM - Я делаю приложение для чата и пытаюсь найти лучший способ «кого-то». Я надеялся, что сервер может отправить сообщение о том, что человек был пнут X по причине Y, а затем сразу же закрыл соединение и отключил его. –