我有一个服务器(远程),它为客户端(远程)重定向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;
}
}
}