Mac OS 上使用 C++ 编写局域网数据包发送程序
由于涉及到网络编程,需要先包含以下头文件:
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
接着定义一个发送数据包的函数:
void sendPacket(const char* targetIP, int targetPort) {
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock < 0) {
perror("socket error");
return;
}
struct sockaddr_in targetAddr;
targetAddr.sin_family = AF_INET;
targetAddr.sin_port = htons(targetPort);
if (inet_pton(AF_INET, targetIP, &targetAddr.sin_addr) <= 0) {
perror("inet_pton error");
close(sock);
return;
}
const char* message = 'Hello, World!';
int messageLength = strlen(message);
for (int i = 0; i < 10; i++) {
int bytesSent = sendto(sock, message, messageLength, 0, (struct sockaddr*)&targetAddr, sizeof(targetAddr));
if (bytesSent != messageLength) {
perror("sendto error");
close(sock);
return;
}
}
close(sock);
}
该函数接收目标IP地址和端口号作为参数,使用UDP协议向目标地址发送10个数据包,每个数据包内容为'Hello, World!'。
最后在主函数中调用sendPacket函数即可:
int main(int argc, char** argv) {
const char* targetIP = "192.168.1.100"; // 目标IP地址
int targetPort = 80; // 目标端口号
sendPacket(targetIP, targetPort);
return 0;
}
需要注意的是,这里使用的是UDP协议发送数据包,所以无法保证数据包一定能够被目标主机接收到,也无法保证数据包的顺序。如果需要保证数据的可靠传输和顺序性,可以使用TCP协议。
原文地址: https://www.cveoy.top/t/topic/nw3n 著作权归作者所有。请勿转载和采集!