gpt4 book ai didi

c - C 中的 "UDP datagrams only"套接字

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:47 24 4
gpt4 key购买 nike

在 Linux、Ubuntu 14.04 中:我正在编写一个实现套接字的代码来发送纯 UDP 数据报,其中包括 UDP header +有效负载,没有 IP header 的任何部分。

我已经创建了套接字

sokt_fd=socket(AF_INET, SOCK_RAW, IPPROTO_UDP)

此外,我已经准备好UDP header 。

  1. 我想把IP封装过程交给内核。

  2. 我想通过任何可用的 IP 接口(interface)发送数据报。 (我不想指定源IP,也把这个任务交给内核)。

  3. 发送数据报前需要指定目的IP地址吗?

  4. 我必须使用“sendto()”命令来发送数据报;我必须如何填写“sockaddr”数据结构?

    #include <netinet/in.h>
    struct sockaddr
    {
    unsigned short sa_family;// address family, AF_xxx
    char sa_data[14];// 14 bytes of protocol address
    };

最佳答案

不要使用sockaddr 结构。当您必须将 sockaddr* 传递给函数时,请改用 sockaddr_in 并转换它。

struct sockaddr_in myaddr;
int s;

myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(3490);
inet_aton("63.161.169.137", &myaddr.sin_addr.s_addr);

s = socket(PF_INET, SOCK_STREAM, 0);
bind(s, (struct sockaddr*)myaddr, sizeof(myaddr));

套接字 API 是为不同的寻址系列而设计的,其他的是红外线和蓝牙。由于 AF_INET 只是 API 函数家族中的一个,因此在参数中使用一般的 sockaddr 类型。

关于c - C 中的 "UDP datagrams only"套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com