2013-04-03 56 views
0

我需要关于设置3 UDP套接字的帮助。套接字是相同的远程端口号的一部分,必须是61000,61001和61002. 我需要设置此套接字,因为我应该在选择功能上使用它们来发送和接收数据。设置多个UDP套接字

我尝试了很多方法,但没有人正常工作。 我知道,这是正常的程序设置一个插座:

int set_socket() { 

    /* get a datagram socket */ 
    sock = socket(AF_INET, SOCK_DGRAM, 0); 
    if (sock == SOCKET_ERROR) { 
    printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno)); 
    exit(1); 
    } 
    OptVal = 1; 
    ris = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&OptVal, sizeof(OptVal)); 
    if (ris == SOCKET_ERROR) { 
     printf ("setsockopt() SO_REUSEADDR failed, Err: %d \"%s\"\n", errno,strerror(errno)); 
     exit(1); 
    } 
    /* name the socket */ 
    Local.sin_family  = AF_INET; 
    Local.sin_addr.s_addr = htonl(INADDR_ANY); 
    Local.sin_port  = htons(local_port_number_UDP); 
    ris = bind(sock, (struct sockaddr*) &Local, sizeof(Local)); 
    if (ris == SOCKET_ERROR) { 
    printf ("bind() failed, Err: %d \\n",errno); 
    exit(1); 
    } 
    /* assign our destination address */ 
    To.sin_family    = AF_INET; 
    To.sin_addr.s_addr   = inet_addr(string_remote_ip_address_UDP); 
    To.sin_port     = htons(remote_port_number_UDP); 

} 

如何设置所有3插槽用不同的远程端口号?我必须为每个套接字使用不同的struct(Local和To)?

谢谢,对不起我的英文不好。

+3

使用3个插座似乎有点浪费。大多数应用程序使用SINGLE套接字,只需将一些识别数据放入数据包中,以说明发生了什么。例如“这是一个更新包,这里是数据”。 “这是一个获取数据包,这是请求”。 –

+0

这不是为什么protocals被发明出来的最后一个原因...... –

+0

所以我需要如果我应该从3个不同的端口发送和接收? – Ciotto

回答

0

我必须为每个套接字使用不同的结构(Local和To)吗?

不,你可以重复使用相同的Local两个其他插槽的bind(改变sin_port后)。如果每次需要更换另一个套接字时更改sin_port,则可以重复使用相同的To