Несколько подключений от одного клиента - PullRequest
0 голосов
/ 16 марта 2012

Я занимаюсь разработкой клиент-серверной программы на языке C. Сервер поддерживает несколько соединений с одного порта и создает новый процесс для каждого подключенного клиента.Клиент может отправить на сервер несколько команд и получить оттуда результаты.Одной из этих команд является команда «get», которая предназначена для передачи любых файлов с сервера на клиент.(Например, get abc.txt bcd.pdf ...).

Однако эту операцию переноса следует выполнять в другом потоке.Например, если клиент запрашивает передачу 3 файлов с сервера;На стороне сервера и клиента создаются 3 разных потока.Таким образом, клиент создаст client_thread1, client_thread2, client_thread3, а сервер создаст server_thread1, server_thread2, server_thread3 для файлов.И затем первый файл будет загружен server_thread1 в client_thread1, второй файл будет загружен server_thread2 в client_thread2 и т. Д.

Это было единственное, что я застрял.Как я могу сопоставить поток сервера с потоком клиента;так что серверный поток взаимодействует только с клиентским потоком, в то время как серверная и клиентская части свободно выполняют свою работу.

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 17 марта 2012

Если вы хотите независимый прогресс между передачей файлов, вам придется открыть несколько соединений с вашим сервером.Таким образом, у вас будет отдельный сокет для командного канала и сокет для каждой одновременной передачи файла.Затем вы можете обслуживать каждый сокет либо из отдельного потока (плохо, как упоминалось выше), либо используя что-то вроде poll для мультиплексирования обработки сокетов в одном потоке.И вот так, вы переписали FTP:)

В качестве альтернативы, вы можете придумать какую-то схему для мультиплексирования нескольких передач файлов на одном сокете.

...