• TCP客户端发送结构体数据


    #define _CRT_SECURE_NO_WARNINGS

    #include
    #pragma comment(lib, "Ws2_32.lib")

    #include
    #include
    using namespace std;

    #define BUF_LEN 128

    struct Header
    {
        unsigned int MakeLength;
        unsigned int ModelLength;
    } head;

    struct CarData
    {
        int Vin; //Unique Vehicle ID
        char* Make; //A string containing the make of the car
        char* Model; //A string containing the model of the car
        float MSRP; //Suggest Manufacturers Retail Price in $
    }car;

    struct Packet
    {
        struct Header head;
        struct CarData car;
    };

    char* SerializePacket(const struct Packet& packet, int& TotalSize)
    {
        TotalSize = sizeof(packet.head) + sizeof(packet.car.Vin) + packet.head.MakeLength + packet.head.ModelLength + sizeof(packet.car.MSRP);

        // Allocate a buffer to hold the serialized data
        char* buffer = new char[TotalSize];

        // Copy the data from the CarData struct to the buffer
        memcpy(buffer, &packet.head, sizeof(packet.head));
        memcpy(buffer + sizeof(packet.head), &packet.car.Vin, sizeof(packet.car.Vin));
        memcpy(buffer + sizeof(packet.head) + sizeof(packet.car.Vin), packet.car.Make, packet.head.MakeLength);
        memcpy(buffer + sizeof(packet.head) + sizeof(packet.car.Vin) + packet.head.MakeLength, packet.car.Model, packet.head.ModelLength);
        memcpy(buffer + sizeof(packet.head) + sizeof(packet.car.Vin) + packet.head.MakeLength + packet.head.ModelLength, &packet.car.MSRP, sizeof(packet.car.MSRP));

        return buffer;
    }

    int main()
    {
        //starts Winsock DLLs
        WSADATA wsaData;
        if ((WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) {
            return 0;
        }

        //initializes socket. SOCK_STREAM: TCP
        SOCKET ClientSocket;
        ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (ClientSocket == INVALID_SOCKET) {
            WSACleanup();
            return 0;
        }

        //Connect socket to specified server
        sockaddr_in SvrAddr;
        SvrAddr.sin_family = AF_INET; //Address family type itnernet
        SvrAddr.sin_port = htons(27000); //port (host to network conversion)
        SvrAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //IP address
        if ((connect(ClientSocket, (struct sockaddr*)&SvrAddr, sizeof(SvrAddr))) == SOCKET_ERROR) {
            closesocket(ClientSocket);
            WSACleanup();
            return 0;
        }

        /***********************************
        * Your client code goes here       *
        ************************************/

            char buffer[128];
            memset(buffer, 0, 128);
            Packet packet;
            memset(&packet, 0, sizeof(Packet));

            cout << "Enter Vin: ";
            cin >> packet.car.Vin;
            cout << "Enter Make: ";
            cin >> buffer;
            packet.head.MakeLength = strlen(buffer) + 1;
            packet.car.Make = (char*)malloc(packet.head.MakeLength);
            strcpy(packet.car.Make, buffer);
            packet.car.Make[packet.head.MakeLength - 1] = '\0';
            memset(buffer, 0, sizeof(buffer));
            cout << "Enter Model: ";
            cin >> buffer;
            packet.head.ModelLength = strlen(buffer) + 1;
            packet.car.Model = (char*)malloc(packet.head.ModelLength);
            strcpy(packet.car.Model, buffer);
            packet.car.Model[packet.head.ModelLength - 1] = '\0';
            cout << "Enter MSRP: ";
            cin >> packet.car.MSRP;

            int totalSize;
            char* serializedPacket = SerializePacket(packet, totalSize);

            send(ClientSocket, serializedPacket, totalSize, 0);

            delete[] serializedPacket;

            //closes connection and socket
            closesocket(ClientSocket);
            //frees Winsock DLL resources
            WSACleanup();
        
        return 1;
    }
     

  • 相关阅读:
    算法通关村第二关-白银挑战反转链表拓展问题
    第四次作业
    【人工智能哲学01/2】人工智能前世今生
    qt4 中文乱码处理
    神经网络除了bp还有什么,bp神经网络是什么网络
    D. Tournament Countdown(交互题)
    路由进阶:双点双向路由重发布实验配置
    VE3+elementplus搭建通用管理系统实例:项目规划
    Docker 日志
    AI项目六:基于YOLOV5的CPU版本部署openvino
  • 原文地址:https://blog.csdn.net/mawanbing/article/details/136640453