C++ recv()问题

Adr*_*ian 1 c++ sockets

我想发一个字符串"Hello there",但我只能得到"re".这是为什么?

void Accept()
{
    SOCKADDR_IN sock;
    int intsock = sizeof(sock);
    remoteSocket = ::accept(desc, (LPSOCKADDR)&sock,  &intsock);
    if(remoteSocket == -1)
    {
        cout << "Error in Accept()" << endl;
    }
    HandleConnection();
}

void HandleConnection()
{
    cout << "You are connected !!!" << endl;
    char* temp = new char[20];
    Recv(temp);
    cout << temp << endl;
}

void Send(const char* buffer)
{
    if((::send(remoteSocket, buffer, strlen(buffer), 0)) < 0)
    {
        cout << "Error in Send()" << endl;
    }
}

void Recv(char* buffer)
{
    int n = 0;
    while((n = ::recv(remoteSocket, buffer, strlen(buffer), 0)) 0)
    {
        buffer[n] = 0;
    }
}

~Server()
{
    WSACleanup();
}

};

int main()
{
    Server s;
    s.Initialize();
    s.Socket();
    s.Bind();
    s.Listen();
    while(1)
    {
        s.Accept();
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

jwe*_*ich 5

尽管指出析构函数问题@Billy奥尼尔,你正在做recv()一个循环,但每次你覆盖接收缓冲区.我相信你想要这样的东西:

// Pass buffer and its real size. This function takes care of NULL termination.
size_t Recv(char* buffer, size_t size) {
    size_t total = 0, n = 0;
    while((n = ::recv(remoteSocket, buffer+total, size-total-1, 0)) > 0) {
        total += n;
    }
    buffer[total] = 0;
    return total;
}

int main() {
    char buffer[128];
    // Connect or whatever (and set your global remoteSocket)
    Recv(buffer, sizeof(buffer));
    cout << buffer << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)