2013-04-03 55 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