gpt4 book ai didi

c++ - DHCP over UDP 发送问题

转载 作者:行者123 更新时间:2023-11-28 01:08:45 28 4
gpt4 key购买 nike

我正在尝试制作一个简单的 DHCP 客户端。它应该向 DHCP 服务器(已经有这个)发送一条消息,接收返回的消息并解析它。我创建了一个结构

struct dhcp_msg{
_int8 op; //opcode
_int8 htype; //hardware type
_int8 haddr; //hardware adress
_int8 hops; //hop count

_int32 tid; //transaction id

_int16 sec; //seconds
_int16 unused; //unused

_int32 cipaddr; //client ip
_int32 yipaddr; //your ip
_int32 sipaddr; //server ip
_int32 gipaddr; //gateway ip

char chaddr[16]; //client hardware address
char sname[64]; //server name
char bname[128]; //boot file name

_int8 mcookie[4]; //magic cookie
};

如果我用相应的数据填充所有字段,如何使用 sendto() 发送它?我是否应该将它解析为 char 并发送一个指针,因为 sendto() 将一个指针作为第二个参数。

char *buffer;
...?
sendto(socketC, buffer, sizeof(buffer), 0, (SOCKADDR *)&servAddr, sizeof(sockaddr_in));

如何发送这条消息?

最佳答案

首先你必须告诉你的编译器不要在结构中添加任何填充。然后你可以这样做:

struct dhcp_msg my_msg;
// Fill my_msg
sendto(socket, (void *) &my_msg, ...)

更新

在 Linux 和 Windows 中,sendto 函数有点不同,正如我们在对此答案的评论中发现的那样。所以我们应该分别对Linux和Windows使用(void *)(char *)转换。

关于字节序:你也应该小心。但它应该适用于所有 x86 CPU。我用过的唯一“错误的”字节序风格系统是一台基于 IBM Power6 的 super 计算机。

关于c++ - DHCP over UDP 发送问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700633/

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