客户端连接的多个套接字

时间:2010-07-29 20:48:14

标签: c sockets winsock

是否可以有多个套接字,可以通过TCP或UDP在一个程序中使用?

例如: SocketOne:端口4567的TCP套接字; socketTwo:端口8765的TCP套接字; socketThree:7643处的UDP套接字。

这些家庭将是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 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

man 选择

答案 2 :(得分:1)

有一些现实世界的例子。 FTP有一个控制和数据端口,使用TCP和多媒体应用程序将使用SIP或RTSP连接进行控制(TCP),并为每个接收到的数据流使用多个RTP和RTCP端口(UDP)。

select或poll用于unix,在Windows上有OVERLAPPED apis非抢占式地执行此操作。或者,这可以通过多个线程来完成。