Я пишу параллельный сервер, это, как предполагается, имеет канал передачи и канал передачи данных.
Клиент первоначально соединяется с каналом передачи для аутентификации после успешной аутентификации, клиент затем подключен к каналу передачи данных для доступа к данным.
Моя программа уже делает это, и я использую потоки. Моя единственная проблема - то, что, если я пытаюсь соединить другой клиент, я добираюсь, "не может связать: уже исправьте используемую" ошибку.
У меня есть он этот путь:
Клиент соединяется с портом 4567 (и вводит свою информацию о входе в систему). Поток порожден для обработки клиента (повторенный для каждого клиента, который соединяется). В созданном потоке у меня есть функция (давайте назовем его FUNC_A), который проверяет информацию о входе в систему клиента (не волнуйтесь о том, как проверка сделана), в случае успеха, поток запускает сервер данных (слушающий на 8 976), затем отправляет OK клиенту, когда-то получил клиентские попытки соединиться с сервером данных.
После того как клиент соединяется с сервером данных из FUNC_A, клиент принят, и другой поток порожден для обработки соединения клиента с сервером данных (надо надеяться, все ясно). Теперь, все, что хорошо работает. Однако, если я пытаюсь соединиться со вторым клиентом, когда это добирается до ЧАСТИ B, я добираюсь, "не может связать ошибку: уже обратитесь используемый". Я попробовал столько различных путей, я даже попытался породить поток, чтобы запустить сервер данных и принять клиент и затем запустить другой поток для обработки того соединения. Все еще никакая удача.
Дайте мне предложение относительно того, что я делаю неправильно, как делают я иду о выполнении этого или что является лучшим способом реализовать его.Спасибо
Ваша проблема заключается в следующем: "...поток запускает сервер данных (слушающий на 8976)... "
Если я правильно вас понял, каждый раз, когда подключается клиент, вы пытаетесь запустить прослушивание порта 8976. Проблема, однако, в том, что на данном порту может быть только один сокет. Когда вы снова пытаетесь начать прослушивание того же порта, вы получаете эту ошибку.
Поэтому у вас есть два варианта:
Второй вариант, однако, имеет большую проблему: как вы собираетесь отличать одного клиента от другого? Поэтому я рекомендую выбрать первый вариант.
Немного пищи для размышлений: то, что вы описываете, в точности соответствует тому, как работает FTP. А FTP-серверы используют первый вариант. Не случайно, наверное? ;-)