[英]Linux UDP client, how?
#include <stdio.h>
#include <sys/socket.h>
#include <netdb.h>
int main () {
char buf[4] = { 0xff, 0xff, 0xff, 0xff };
struct addrinfo adr, *res;
adr.ai_family = AF_INET;
adr.ai_socktype = SOCK_DGRAM;
getaddrinfo ("192.168.1.1", NULL, &adr, &res);
int sd = socket (res->ai_family, res->ai_socktype, res->ai_protocol);
if (sendto (sd, buf, sizeof (buf), MSG_OOB, res->ai_addr, res->ai_addrlen) < 0)
perror ("ERROR sendto"); //I have added an if tag and an error message posiblility
return 0;
}
ERROE sendto:不支持操作
這是所有的信息。 beej的指南網絡編程,我已經讀過getaddrinfo第二個參數是NULL,我編譯它,它會很好,這行沒有問題。 現在問題是操作不支持錯誤消息。
似乎有幾個錯誤。
首先,我認為MSG_OOB對UDP是非法的。 這可能是錯誤消息試圖說的內容。 請嘗試0。
然后, getaddrinfo()
調用看起來很奇怪(至少我不明白這一點)。 你說“我已經編譯了它,它會很好,這行沒有問題”但是你沒有錯誤處理來證明它...
我的預感是你在sendto()
中使用的套接字地址的地址或端口不正確,你在修復MSG_OOB后仍然會出錯。 有沒有一個原因你不只是像這里一樣手動設置它們 - 你是否想讓getaddrinfo()
為你挑選一個合適的端口? 我認為這不起作用:
如果service為NULL,則返回的套接字地址的端口號將保持未初始化狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.