是否可以有多个套接字,可以通过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 回答
你需要
select
功能:http://linux.die.net/man/2/select更加人性化:http://beej.us/guide/bgnet/html/single/bgnet.html#select
男人 select .
有一些现实世界的例子 . FTP有一个控制和数据端口,使用TCP和多媒体应用程序将使用SIP或RTSP连接进行控制(TCP),并为接收的每个数据流使用多个RTP和RTCP端口(UDP) .
在unix上使用select或poll,在Windows上有OVERLAPPED apis非抢先地执行此操作 . 或者,这可以通过多个线程完成 .