Несколько разъемов для подключения клиентов - PullRequest
2 голосов
/ 30 июля 2010

Можно ли иметь несколько сокетов, которые могут быть по TCP или UDP в одной программе?

Например: SocketOne: сокет TCP на порту 4567; socketTwo: сокет TCP на порту 8765; socketThree: сокет UDP на 7643.

Семейства будут AF_INET, а адреса будут INADDR_ANY для каждого.

Я связываю и слушаю TCP, и просто связываю для UDP.

Что заставляет меня сомневаться в том, что я собираюсь это сделать, так это то, как мне ждать клиента в каждом сокете вместе.

Я знаю, что приведенный ниже код не будет работать, но я не знаю, что еще или как объяснить, что я пытаюсь сказать.

while (1)  
{   
    connected = accept(socketOne, (struct sockaddr *)&client_addr,&sin_size);

    connected = accept(socketTwo, (struct sockaddr *)&client_addr,&sin_size);

    bytes_read = recvfrom(socketThree,recv_data,1024,0,(struct sockaddr *)&client_addr, &addr_len);

}

Ответы [ 3 ]

4 голосов
/ 30 июля 2010

Вам нужна функция select: http://linux.die.net/man/2/select

Более удобная для пользователя: http://beej.us/guide/bgnet/html/single/bgnet.html#select

1 голос
/ 30 июля 2010

Есть несколько примеров из реального мира.FTP имеет порт управления и данные, которые используют как TCP, так и мультимедийные приложения будут использовать соединения SIP или RTSP для управления (TCP) и несколько портов RTP и RTCP (UDP) для каждого полученного потока данных.

выбор или опросиспользуется в Unix и в Windows, есть ПЕРЕКРЫТЫЙ API, чтобы сделать это без упреждения.Кроме того, это может быть сделано с несколькими потоками.

1 голос
/ 30 июля 2010

человек выберите .

...