由于涉及到网络编程,需要先包含以下头文件:

#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协议。

Mac OS 上使用 C++ 编写局域网数据包发送程序

原文地址: https://www.cveoy.top/t/topic/nw3n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录