首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用recv()和vector <unsigned char>的更优雅的方法

使用recv()和vector<unsigned char>的更优雅的方法是使用C++的封装和面向对象的特性,将底层的网络通信操作封装成一个类,并提供更简洁、易用的接口。以下是一个简单的示例:

代码语言:c++
复制
#include<iostream>
#include<vector>
#include<string>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

class Network {
public:
    Network(const std::string& ip, int port) {
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) {
            std::cerr << "socket error"<< std::endl;
            return;
        }

        struct sockaddr_in serv_addr;
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(port);
        if (inet_pton(AF_INET, ip.c_str(), &serv_addr.sin_addr) <= 0) {
            std::cerr << "inet_pton error"<< std::endl;
            return;
        }

        if (connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
            std::cerr << "connect error"<< std::endl;
            return;
        }
    }

    ~Network() {
        close(sockfd);
    }

    std::vector<unsigned char> receive() {
        std::vector<unsigned char> data;
        char buffer[1024];
        int n = recv(sockfd, buffer, sizeof(buffer), 0);
        if (n < 0) {
            std::cerr << "recv error"<< std::endl;
            return data;
        }
        data.insert(data.end(), buffer, buffer + n);
        return data;
    }

private:
    int sockfd;
};

int main() {
    Network network("127.0.0.1", 8080);
    std::vector<unsigned char> data = network.receive();
    for (auto& c : data) {
        std::cout << c;
    }
    std::cout<< std::endl;
    return 0;
}

在这个示例中,我们定义了一个名为Network的类,该类封装了底层的socket操作,并提供了一个receive()方法来接收数据。该方法使用recv()函数来接收数据,并将数据存储在一个vector<unsigned char>中,以便更方便地处理数据。

这种方法的优点是,它将底层的网络通信操作封装起来,使得我们可以更容易地使用C++的面向对象特性来处理网络通信。此外,它还提供了一个更简洁、易用的接口,使得我们可以更容易地处理接收到的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券