запись нескольких потоков в одну и ту же задачу сокета - PullRequest
1 голос
/ 30 апреля 2010

Моя программа использует сокеты для межпроцессного взаимодействия. Один сервер прослушивает сокет-порт (B) на локальном хосте, ожидая подключения клиентов TCP. А на другом конце сервера находится еще один сокет (A), который отправляет данные в Интернет. Сервер предназначен для приема всего, что отправляют ему TCP-клиенты, и пересылки на сервер в Интернете. Мой вопрос: если два TCP-клиента отправляли данные одновременно, это станет проблемой для исходящего сокета сервера (A)?

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Документы MSDN рекомендуют использовать BeginSend и EndSend, если несколько потоков будут использовать один и тот же сокет для передачи данных.

Поэтому я бы предложил вам использовать эти методы или записать исходящие данные в синхронизированную очередь, из которой один поток затем выберет данные из очереди и отправит их через сокет (A)

1 голос
/ 30 апреля 2010

Вы не описываете, как вы объединяете трафик нескольких клиентских потоков в один исходящий поток. Простое произвольное помещение кусков клиентского трафика в поток гарантировано не работа. Принимающая сторона на противоположном конце интертубы не будет знать, какие байты принадлежат какому разговору.

Я бы рекомендовал вам сначала сосредоточиться на противоположном конце. Какая машина существует, что она делает, что нужно знать о множественных клиентах на локальном конце.

...