如何正确读取/发送数据包
How to read/send packets correctly?
我正在尝试通过UDP发送数据包,并且不允许使用SOCK_RAW(学校项目)。我发送的数据包有一个标头结构ip和一个字符串数据部分。我把它们放在一个char数组中(数据包本身配置正确)。
以下是我发送的方式:
sendPacket(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(数据包)字节。但是sizeof(packet)是4,因为packet是一个指针。你需要一个更好的方法来跟踪你想要发送的实际大小。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 引入流时C++数据文件未正确读取?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 不同的数据包,联合 - 正确的用法\验证?
- 如何通过解析缓冲区并将数据放入正确的结构来处理传入的数据包连接?
- 如何正确接收多播UDP数据包
- 为什么TCP套接字在接收到不正确的ACK时发送RST数据包而不是重新发送数据
- 如何正确读取/发送数据包
- 如何测试数据包发送是否正确
- 原始数据包创建导致 IP 字段顺序不正确
- UDP标头校验和不正确时是否丢弃UDP数据包