错误:在原始套接字中使用sendto()时,地址错误

卡尔提克·陈努帕蒂(Karthik Chennupati)

我正在编写一个简单的网络应用程序,并且需要制作UDP数据包并将其发送到特定主机。

int main(void){

    // Message to be sent.
    char message[] = "This is something";

    int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

    if(sockfd < 0){
        perror("Error creating socket");
        exit(1);
    }

    struct sockaddr_in this, other;

    this.sin_family = AF_INET;
    other.sin_family = AF_INET;


    this.sin_port = htons(8080);
    other.sin_port = htons(8000);


    this.sin_addr.s_addr = INADDR_ANY;
    other.sin_addr.s_addr = inet_addr("10.11.4.99");

    if(bind(sockfd, (struct sockaddr *)&this, sizeof(this)) < 0){
        printf("Bind failed\n");
        exit(1);
    }

    char packet[64] = {0};

    struct udphdr *udph = (struct udphdr *) packet;
    strcpy(packet + sizeof(struct udphdr), message);

    udph->uh_sport = htons(8080);
    udph->uh_dport = htons(8000);
    udph->uh_ulen = htons(sizeof(struct udphdr) + sizeof(message));
    udph->uh_sum = 0;

    if(sendto(sockfd, packet, udph->uh_ulen, 0, (struct sockaddr *) &other, sizeof(other)) < 0)
        perror("Error");
    else
        printf("Packet sent successfully\n");

    close(sockfd);

    return 0;
}

一切正常,直到调用sendto()为止。sendto()提供“错误地址”。谁能指出我要去哪里了?将端口绑定到原始套接字是否有任何问题?

破折号

该代码将消息的长度(udph-> uh_len)转换为网络字节顺序(htons)。不需要,因为它是size_t的参数类型。仅端口号(在sockaddr结构中)需要htons转换。

    udph->uh_ulen = sizeof(struct udphdr) + sizeof(message);

当前代码在uh_ulen中产生大量(> 8000),从而导致发送失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ZeroMQ:重新绑定套接字时使用地址错误

来自分类Dev

ZeroMQ:重新绑定套接字时,地址使用中错误

来自分类Dev

套接字错误:地址已在使用中

来自分类Dev

使用Unix套接字获取“地址已在使用中”错误

来自分类Dev

OpenBSD 上的原始套接字 icmp 协议族不支持 sendto 地址族

来自分类Dev

Python:在OSX中使用原始套接字

来自分类Dev

使用原始套接字时,为什么需要两次给出MAC地址?

来自分类Dev

在C中使用指针时获取地址边界错误

来自分类Dev

使用线程的套接字写入错误

来自分类Dev

IOError:使用BeautifulSoup的[Errno套接字错误]

来自分类Dev

套接字错误-python

来自分类Dev

套接字错误-python

来自分类Dev

我正在尝试创建udp套接字并通过它发送一个字符串。但它在sendto()时给出10038错误

来自分类Dev

在运行while循环中使用三重套接字的函数时,出现OSError :(地址已在使用中)

来自分类Dev

在同一台PC中使用Java套接字传输文件时出现“ BindException:地址已在使用中”异常

来自分类Dev

使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

来自分类Dev

使用chrome.sockets.udp时套接字未连接错误

来自分类Dev

使用Flutter打印到ESC / POS时如何防止套接字超时错误

来自分类Dev

Restify:复制文件并使用Promise链查询数据库时出现套接字挂起错误

来自分类Dev

使用chrome.sockets.udp时套接字未连接错误

来自分类Dev

使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

来自分类Dev

当我使用 python urllib 从 url 检索文件时发生 Errno 套接字错误

来自分类Dev

使用python从维基百科访问数据时如何解决套接字错误

来自分类Dev

在Linux中创建套接字时获取错误代码

来自分类Dev

磁盘存储已满时MySQL套接字出现错误

来自分类Dev

尝试重新打开连接时出现套接字关闭错误

来自分类Dev

服务器回显时套接字编程错误

来自分类Dev

在Java中创建套接字时出现IOException错误

来自分类Dev

尝试连接套接字时出现错误10051

Related 相关文章

  1. 1

    ZeroMQ:重新绑定套接字时使用地址错误

  2. 2

    ZeroMQ:重新绑定套接字时,地址使用中错误

  3. 3

    套接字错误:地址已在使用中

  4. 4

    使用Unix套接字获取“地址已在使用中”错误

  5. 5

    OpenBSD 上的原始套接字 icmp 协议族不支持 sendto 地址族

  6. 6

    Python:在OSX中使用原始套接字

  7. 7

    使用原始套接字时,为什么需要两次给出MAC地址?

  8. 8

    在C中使用指针时获取地址边界错误

  9. 9

    使用线程的套接字写入错误

  10. 10

    IOError:使用BeautifulSoup的[Errno套接字错误]

  11. 11

    套接字错误-python

  12. 12

    套接字错误-python

  13. 13

    我正在尝试创建udp套接字并通过它发送一个字符串。但它在sendto()时给出10038错误

  14. 14

    在运行while循环中使用三重套接字的函数时,出现OSError :(地址已在使用中)

  15. 15

    在同一台PC中使用Java套接字传输文件时出现“ BindException:地址已在使用中”异常

  16. 16

    使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

  17. 17

    使用chrome.sockets.udp时套接字未连接错误

  18. 18

    使用Flutter打印到ESC / POS时如何防止套接字超时错误

  19. 19

    Restify:复制文件并使用Promise链查询数据库时出现套接字挂起错误

  20. 20

    使用chrome.sockets.udp时套接字未连接错误

  21. 21

    使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

  22. 22

    当我使用 python urllib 从 url 检索文件时发生 Errno 套接字错误

  23. 23

    使用python从维基百科访问数据时如何解决套接字错误

  24. 24

    在Linux中创建套接字时获取错误代码

  25. 25

    磁盘存储已满时MySQL套接字出现错误

  26. 26

    尝试重新打开连接时出现套接字关闭错误

  27. 27

    服务器回显时套接字编程错误

  28. 28

    在Java中创建套接字时出现IOException错误

  29. 29

    尝试连接套接字时出现错误10051

热门标签

归档