Winsock读取远程数据(CMD)

时间:2015-01-12 11:13:36

标签: c++ winsock recv

我有一个服务器(远程),它为客户端(远程)重定向shell,客户端使用netcat或telnet进行通信。 我正在开发用于Windows的客户端,但是当我从服务器接收数据时遇到问题,它们不完整,我也不能向服务器发送超过2次的命令。

应用程序应该向shell发送远程命令(发送)并接收数据(recv),直到客户端希望离开。 问题是从服务器接收完整数据......

应该怎样做才能改善这个应用程序?

while (1)
{
    //READ
    memset(pbuf, 0, sizeof(pbuf));
    iResult = recv(client[iD].socket, pbuf, sizeof(pbuf) - 1, 0);
    if (iResult < 0)
    {
        if (WSAGetLastError() == WSAEWOULDBLOCK)
        {
            continue;
        }

        printf("recv error: %d\n", WSAGetLastError());
        return SOCKET_ERROR;
    }
    else if (iResult == 0)
    {
        printf("disconnected\n");
        return 0;
    }
    else
    {
        for (int i = 0; i < iResult; i++)
        {
            std::cout << pbuf[i];
        }
        memset(pbuf, 0, sizeof(pbuf));

        //SEND
        memset(key_buffer, 0, sizeof(key_buffer));
        fgets(key_buffer, sizeof(key_buffer) - 1, stdin);
        if (!strcmp(key_buffer, "exit"))
            break;
        iResult = send(client[iD].socket, key_buffer, sizeof(key_buffer) - 1, 0);
        if (iResult == SOCKET_ERROR) {
            printf("send failed with error: %d\n", WSAGetLastError());
            CLEAN_UP();
            return 1;
        }

    }
}

0 个答案:

没有答案