gpt4 book ai didi

c++ - 如何正确读取/发送数据包?

转载 作者:行者123 更新时间:2023-11-30 05:46:32 24 4
gpt4 key购买 nike

我正在尝试通过 UDP 发送数据包,但不允许我使用 SOCK_RAW(学校项目)。我发送的数据包有一个 header struct ip 和一个 string data 部分。我将它们放入一个字符数组中(数据包本身配置正确)。

这是我发送的方式:

sendPacket(packet);

其中 packet 是一个 char[] 和

其中 sendPacket 定义为:

void IPNode::sendPacket(char* packet){
//define socket, destSockAddr
int success = sendto(socket, packet, sizeof(packet), 0,
(struct sockaddr *) &destSockAddr, sizeof(destSockAddr));
}
}

数据包似乎是正确的。然而,我是这样读进去的。

while (true) {
struct sockaddr_in remoteAddr;
socklen_t remoteAddrLen = sizeof(remoteAddr);
char buffer[BUF_SIZE];
int recvlen = recvfrom(myListenSocket, buffer, BUF_SIZE, 0, 0, 0);
onReceive(buffer);
// other stuff

}

onReceive 在哪里:

void onReceive(char* packet) {
ip* ptr = (ip*)packet; //the struct ip is the beginning of the packet
struct ip ipCpy = *ptr;
struct in_addr inAddrCpy = ipCpy.ip_src;
char* ipString = inet_ntoa(inAddrCpy);
cout << ipString << endl;
return;
}

但是,打印出来的 ipString 与发送前数据包中的 ipString 不同。我是否错误地访问了接收到的数据包?

最佳答案

您正在发送 sizeof(packet) 字节。但是 sizeof(packet) 是 4,因为 packet 是一个指针。您需要一种更好的方法来跟踪要发送的实际大小。

关于c++ - 如何正确读取/发送数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865453/

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