我在IP 192.168.210.120和端口5000上打开了一个UDP套接字。 我想在两个不同的端口(5000,6000)上接收数据。
请指导
答案 0 :(得分:4)
使用单个插槽无法实现。
根据定义,UDP套接字只能绑定到单个端口。这就是这些插座的工作原理。
但是,您可以打开两个插槽。然后,也许使用两个接受线程,可能使用其他机制(POSIX If-Modified-Since
)来检测与这些线程的连接。
如何处理多个侦听UDP套接字取决于您的编程语言/套接字抽象。
答案 1 :(得分:0)
如前所述,如果要在两个不同的端口上接收数据,则每个端口都需要一个单独的套接字。但是,您可以使用select()
函数一次监视两个套接字。
int socket1, socket2;
fd_set rfds;
struct timeval tv;
int retval;
/* bind socket1 to 5000 and socket2 to 6000, ommitted for brevity */
FD_ZERO(&rfds);
FD_SET(socket1, &rfds);
FD_SET(socket2, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(FD_SETSIZE, &rfds, NULL, NULL, &tv);
if (retval == -1) {
perror("select()");
} else if (retval == 0) {
printf("No data within five seconds.\n");
} else {
printf("Data is available now.\n");
if (FD_ISSET(socket1, &rfds)) {
/* call recvfrom on socket1 to read data */
}
if (FD_ISSET(socket2, &rfds)) {
/* call recvfrom on socket2 to read data */
}
}