Распределенная сеть нескольких клиентов - PullRequest
0 голосов
/ 29 ноября 2011

В настоящее время я работаю над проектом распределенной сети для некоторой сетевой практики, и идея состоит в том, чтобы отправить файл с моего сервера нескольким различным клиентам (после разбивки файла), и клиенты найдут частоту строки и верните его обратно.

Проблема, с которой я сталкиваюсь, заключается в том, как определить каждого клиента и отправить данные каждому. Решение, над которым я работал, чтобы идентифицировать каждого клиента по его порту. Проблема возникает в том, как я обрабатываю несколько соединений и портов. Я знаю, что должен использовать send () для отправки данных в порт, как только я открываю соединение и т. Д., Но я не знаю, как сделать это через несколько соединений (я могу сделать это с одним клиентом и сервером, но не с несколько клиентов)

У кого-нибудь есть предложения с точки зрения высокого уровня? Я получил одно предложение от друга, который сказал:

  1. Открыть сокет
  2. Прослушивание соединений
  3. Когда получен запрос на соединение, создайте новый поток для обработки соединения. Основной процесс вернется к шагу 2 для прослушивания новых соединений, а новый поток будет обрабатывать весь поток данных со связанным клиентом.

Но я не совсем уверен, что понимаю это ... Я также ссылался на http://shoe.bocks.com/net/#socket

Спасибо

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Ваш друг прав. Выполните первые три шага (упомянутых им), а затем вам нужно:

После создания потока отправьте данные (считанные из файла) в новый сокет.

Как только весь файл закончен, вы должны отключиться и выйти из потока. На стороне клиента вы должны обрабатывать разъединение и, вероятно, выход.

ПРИМЕЧАНИЯ:

Кроме того, вы можете использовать sendfile () вместо send (), если хотите. Вы можете использовать select (), если хотите обрабатывать все соединения без порождения потоков.

Подробнее см. http://beej.us/guide/bgnet/.

EDIT:

как идентифицировать каждого клиента? Ответ: Это классическая проблема обнаружения портов, но в вашем случае она проста. Сервер должен прослушивать известный порт (скажем, 12345), и все клиенты будут подключаться к нему. Как только они подключены, сервер имеет все sockfds. Вам необходимо использовать эти sockfds для отправки данных и их идентификации.

0 голосов
/ 19 декабря 2011

Если вы извлекаете networkComms.net , библиотеку сетевых коммуникаций с открытым исходным кодом, после того, как вы создали соединение с клиентом, вы можете отслеживать этого конкретного клиента, посмотрев на его тег NetworkIdentifier,уникален для каждого клиента.

Если вы будете отправлять большие файлы всем своим клиентам, также проверьте включенную DistributedFileSystem, которая специально разработана для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...