2010-04-30 2 views
1

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

Благодаря

+0

зависит от цели. Если вы произвольно смешиваете все клиентские данные в одном TCP-соединении, результат вряд ли имеет смысл. – dtb

+0

Я согласен с @dtb, вам не нужно беспокоиться о проблеме параллелизма, если у вас есть только один «поток», который управляет «Socket». – ChaosPandion

ответ

2

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

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

1

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

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

Смежные вопросы