簡體   English   中英

為什么UDP套接字無法從nc -u主機端口接收udp流量?

[英]Why UDP socket doesn't receive udp traffic from nc -u host port?

 int main(int argc, char *argv[])
 {
     struct sockaddr_in src = { .sin_family=AF_INET, .sin_addr.s_addr=INADDR_ANY, .sin_port=htons(90) };

     int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

     bind(fd, (struct sockaddr *)&src, sizeof(src));

     char buf[1024];
     ssize_t res = recvfrom(fd, buf, sizeof(buf), 0, NULL, 0);
     printf("res=%zi\n", res);

     return 0;
 }

編譯並執行此程序之后。 在另一個終端上執行

nc -u localhost 90

測試自從我使用INADDR_ANY以來,我是否確實從“任何接口”接收到一些udp流量。 但是程序只是掛起。 我想念什么?

端口90小於1024,因此進程需要特權才能將套接字綁定到該端口。

您有兩種選擇:

  1. 選擇1024以上的端口
  2. 以特權運行程序(sudo ...)

人們應該考慮測試bind()的結果bind()通常與其他任何系統調用一樣),以輕松檢測到這種情況。

我沒有通過nc提供足夠的數據。 我面臨兩種情況:

nc -u localhost 1025

該程序正在掛起...。顯然是因為我沒有傳遞任何東西,除了套接字未收到的'\\n'

nc -u -v localhost 1025

我仍然只傳遞'\\n'但是在這種情況下套接字正在接收它。

在這兩種情況下,寫一堆字符都是可行的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM