如何用两个不同的端口打开UDP套接字?

时间:2015-07-02 12:07:20

标签: c sockets

我在IP 192.168.210.120和端口5000上打开了一个UDP套接字。 我想在两个不同的端口(5000,6000)上接收数据。

请指导

2 个答案:

答案 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 */
    }
}