linux套接字只能恢复第一块数据

时间:2015-12-02 18:51:45

标签: c++ linux sockets

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

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

1 个答案:

答案 0 :(得分:2)

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

有效:recv( clientSocket ,缓冲区,this-&gt; packageLength,0)

没有工作recv(袜子,缓冲区,此 - >&gt; packageLength,0)

将袜子改为 clientSocket