c++ - linux套接字只接收第一 block 数据

标签 c++ linux sockets

我有两个程序,在服务器上,只听,客户端在说话。我以每个 64 字节的 block 发送 1 兆字节的数据。我将获得 64 字节的第一个 block ,但随后我的服务器退出,因为它无法获取其他数据。我的客户正在发送所有数据。

void ServerLinux::Receive(){

    int sock = 0;
    struct sockaddr_in server;
    char buffer[this->packageLength];

    if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
        this->Die("Failed to create socket");
    }

    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    server.sin_port = htons(this->port);

    if(bind(sock, (struct sockaddr *) &server, sizeof(server)) < 0){
        this->Die("Failed to bind the server socket");
    }
    if(listen(sock, 1) < 0){
        this->Die("Failed to listen on server socket");
    }

    int clientSocket = 0;
    struct sockaddr_in client;
    socklen_t size = sizeof(client);
    if((clientSocket = accept(sock, (struct sockaddr *) &client, &size)) < 0){
        this->Die("Failed to accept client");
    }

    int received = -1;

    //This is fine data is recived
    if((received = recv(clientSocket, buffer, this->packageLength,0)) < 0){
        this->Die("Failed to receive initial bytes from client");
    }
    std::cout << "Received!" << std::endl;

    //Data is not received in this while loop
    while(received > 0){
        if((received = recv(sock, buffer, this->packageLength,0)) < 0){
            this->Die("Failed to receive additional bytes frin client");
        }
        std::cout << "Received!" << std::endl;
    }
}

最佳答案

为什么不对 recv 使用相同的参数?

有效:recv(clientSocket, buffer, this->packageLength,0)

不起作用 recv(sock, buffer, this->packageLength,0)

将 sock 更改为 clientSocket

关于c++ - linux套接字只接收第一 block 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050685/

相关文章:

不支持 C++ 绑定(bind) UDP 套接字地址系列

sockets - Erlang 变量模式匹配

C++,程序在允许输入之前结束

c++ - 从另一个线程杀死线程C++

c++ - 调用模板成员函数编译失败

c - 防止 getpeername() 返回 127.0.0.1

ARM 上的 Linux "top"实用程序报告我们已验证错误的数字。为什么?

c++ - Windows Phone 8.1 是否支持 select() 套接字函数?

java - 如何从服务器发送 html 文件以在客户端浏览器中打开?

C++ 包含循环