首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux UDP客户端,如何实现?

Linux UDP客户端,如何实现?
EN

Stack Overflow用户
提问于 2014-02-22 21:18:16
回答 1查看 264关注 0票数 1
代码语言:javascript
运行
复制
#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;
}

错误发送到:不支持操作

这就是所有的信息。beej的网络编程指南,我已经读过getaddrinfo的第二个参数是空的,并且我已经编译好了,会很好的,没有问题的这行。目前的问题是操作不支持错误消息。

EN

回答 1

Stack Overflow用户

发布于 2014-02-22 22:44:34

似乎有几个错误。

首先,我认为MSG_OOB对于UDP是非法的。这可能就是错误消息想要表达的意思。改为尝试0。

然后,getaddrinfo()调用看起来很奇怪(至少我不明白这一点)。你说“我编译了它,它会很好,这一行没有问题”,但你没有错误处理来证明它……

我的直觉是,您在sendto()中使用的套接字地址的地址或端口是不正确的,并且在修复MSG_OOB之后仍然会出现错误。有没有什么原因让你不像here那样手动设置它们--你想让getaddrinfo()为你选择一个合适的端口吗?我不认为这是可行的:

如果service为NULL,则返回的套接字地址的端口号将保持未初始化状态。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21954859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档