2010-07-29 3 views
2

Возможно ли иметь несколько сокетов, которые могут быть 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); 

} 
+0

«Возможно ли иметь несколько сокетов, которые могут быть TCP или UDP в одной программе?» - Да, конечно. Но ваш код не показывает, о чем вы спрашиваете - что (например) - «socketThree»? – 2010-07-29 20:53:42

ответ

1

человек выбрать.

+0

Вы пришли первыми. Но все же это то, что нужно сделать. – mslot

1

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

выбор или опрос используются в unix, а в Windows есть OVERLAPPED apis, чтобы сделать это без упреждения. В качестве альтернативы это можно сделать с помощью нескольких потоков.

Смежные вопросы