Клиент-сервер (TCP) Вопрос (время) - PullRequest
1 голос
/ 28 апреля 2011

Я относительно новичок в C #, поэтому, пожалуйста, потерпите меня.Я работаю над клиент-серверным приложением (в C #, .NET 4.0) и не совсем понимаю некоторые вещи.

Давайте предположим, что между сервером TCP и клиентом установлено соединение.Можете ли вы (без ошибок) записать в базовый поток с одной конечной точки, если на другой конечной точке read еще не было вызвано?

Если вы можете, скольковремя вам нужно позвонить read () и все равно получить все данные?Сколько данных может находиться в буфере и как долго он там хранится, если есть какой-то буфер ?Какие данные теряются, если вы не вызываете read в течение некоторого времени (самое новое, самое старое, ...?)

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

Спасибо за ваше драгоценное время и ответы.

1 Ответ

1 голос
/ 28 апреля 2011

Предположим, что между TCP-сервером и клиентом установлено соединение.Можно (без ошибок) записать в базовый поток с одной конечной точки, если на другой конечной точке еще не было прочитано чтение?

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

Если вы можете, сколько времени у вас есть, чтобы вызвать read () и по-прежнему получать все данные?Сколько данных может быть в буфере и как долго они там хранятся, если есть какой-то буфер?Какие данные теряются, если вы не вызываете read в течение некоторого времени (самый новый, самый старый, ...?)

Все зависит от того, насколько большой буфер и как часто отправляет другая конечная точкаданные к нему.Вы можете использовать Socket.ReceiveBufferSize для его настройки.

Могут ли быть проблемы, если вы одновременно отлаживаете и клиентское, и серверное приложение, может ли получиться так, что соединение кажется закрытым, поскольку одно приложение ожидаетсделать следующий шаг в режиме отладки?

Нет.TCP-соединения всегда открыты, если одна из конечных точек не закрывает их.Помните, что другие части вашего кода могут закрывать соединение, если вы используете асинхронный ввод-вывод и не прерываете ВСЕ потоки в каждом приложении.

...