【发布时间】:2018-06-17 02:03:51
【问题描述】:
您好,我目前正在开发一个向 telnet 服务器发送命令的程序。
这是我的代码:
int _tmain(int argc, _TCHAR* argv[])
{
WSAData wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
addrinfo hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
addrinfo* result;
int res = getaddrinfo("192.168.56.101", "23", &hints, &result);
if (res)
{
std::cout << "failed to getaddrinfo" << std::endl;
}
SOCKET sock = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (connect(sock, result->ai_addr, (int)result->ai_addrlen) != SOCKET_ERROR && sock != INVALID_SOCKET)
{
std::cout << "connected";
char* buf = "md c:\\testfolder\r\n";
std::cout << send(sock, buf, sizeof("md c:\\testfolder\r\n"), 0);
const int size = 255;
char out[size];
memset(out, 0, size);
while (true)
{
res = recv(sock, out, size, 0);
std::cout << res << std::endl; // this outputs 21
}
}
else
{
std::cout << res;
}
std::cin.get();
return 0;
}
发送命令后,telnet 服务器应该在C:\\ directory 中创建一个名为testfolder 的文件夹,但它没有这样做。 recv() 正在向我发送垃圾值。
我已阅读 RFC 854,但它真的很难阅读。所以请向我解释我的代码做错了什么。
【问题讨论】:
-
首先将
out清零,recv的返回值是多少?如果没有发生错误,它应该返回接收到的字节数 -
@Asesh 返回值为 3。
-
@Asesh 好。它不是 3. 在我尝试之后。它返回的 21 等于缓冲区的大小
标签: c++ sockets winapi networking telnet