tcpclient — Как подключить несколько клиентов TCP IP к одному порту сервера, используя переполнение стека

Я хочу подключить 2 клиентов к одному и тому же порту сервера, используя TCP IP. Я должен использовать приведенный ниже код перед привязкой:
// Повторное использование уже связанного сокета

int reuse=1;
setsockopt(m_iSocketId, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse))

-2

Решение

listen(iSocketId, 2);
struct sockaddr clientAddr;
socklen_t length = sizeof(clientAddr);
int firstClientSocket = accept(iSocketId, &clientAddr, &length);
length = sizeof(clientAddr);
int secondClientSocket = accept(iSocketId, &clientAddr, &length);

После этого кода у вас будет два клиентских сокета для работы. Обратите внимание, однако, что «принимают» функциональные блоки, пока не подключится какой-либо клиент. В общем, вы должны использовать некоторые aync методы (например, select) для обработки нескольких клиентов.

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

И не забывайте обработку ошибок при прослушивании и приеме вызовов =)

2

Другие решения

Вам не нужно устанавливать SO_REUSEADDR за это. Вам не нужно делать ничего особенного. Просто создайте и подключите столько сокетов в клиенте, сколько вам нужно, и продолжайте звонить accept() на сервере.

0

По вопросам рекламы [email protected]