簡體   English   中英

Linux UDP客戶端怎么樣?

[英]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.

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