• 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;
    }
     

  • 相关阅读:
    【编程题】【Scratch一级】2022.06 报时的公鸡
    java项目测试成功后部署到服务器上的相关问题
    领域驱动设计
    C#的窗体防闪烁解决方案 - 开源研究系列文章
    深度学习三巨头邀你来参会!赢取RTX 3090!NVIDIA GTC 2022 AI 大会来了!
    线性回归模型进行特征重要性分析
    redis 常见的异常
    python+vue企业人力资源管理系统django569
    前后端分离毕设项目之springboot同城上门喂遛宠物系统(内含文档+源码+教程)
    java毕业生设计疫苗药品批量扫码识别追溯系统计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/mawanbing/article/details/136640453