[英]Is there any C socket function, which can look for datagrams from a specific UDP client?
我正在構建的服務器使用 UDP 傳輸層協議。 我有一個場景,多個客戶端可以將數據報發送到我的服務器。 但是每個客戶端可能會跨多個數據報發送數據,在開始處理數據之前,我需要在服務器上擁有整個數據。 從recvfrom()
的手冊頁中,聽起來它從任何 UDP 客戶端讀取數據報。 是否有任何recv*()
系列函數使我們能夠從特定的 UDP 客戶端讀取?
#include <netinet/in.h>
#include <sys/socket.h>
int append_data(void* buf, int size);
int main()
{
/* Create a UDP socket and bind to a port */
int sockfd;
char rd_buf[100];
struct sockaddr_in cliaddr;
for ( ; ; ) {
/* Recvfrom any client */
int addr_len = sizeof(cliaddr);
int rd_status = recvfrom(sockfd, rd_buf, sizeof(rd_buf), 0, (struct sockaddr*) &cliaddr, &addr_len);
if (append_data(rd_buf, rd_status) == DATA_COMPLETE)
continue;
/* Recvfrom a particular client */
for ( ; ; ) {
/* Any function similar to recvfromcli() ? */
int rd_status = recvfromcli(sockfd, rd_buf, sizeof(rd_buf), 0, (struct sockaddr*) &cliaddr, addr_len);
if (append_data(rd_buf, rd_status) == DATA_COMPLETE)
break;
}
}
}
如果不是,我的其他選擇是什么?
您可以創建一個單獨的 UDP 套接字,該套接字bind()
被綁定到本地 IP/端口,並且connect()
被綁定到特定客戶端 IP/端口,然后您可以使用該套接字進行recv()
,它會給您數據報僅來自該客戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.