我一直在尝试从this网站上获取一个使用代码的简单SFTP程序,但是如果没有返回错误代码10061(WSAECONNREFUSED),我甚至无法获取它甚至发送数据。我尝试在活动接口上使用Wireshark并禁用所有防火墙,但是并没有说有什么东西发送到我给的地址(例如:72.196.212.127)。但是,当我给它一个像192.168.1.101这样的本地地址时,它给出了错误代码10060(WSAETIMEDOUT),仍然没有在网络上发送任何数据。我可以使用Putty和WinSCP之类的软件在两个地址上连接到目标计算机,并在命令提示符下对其进行ping操作。
这里是我的连接方法的相关部分:
// Open socket
WSADATA data;
int err = WSAStartup(MAKEWORD(2, 0), &data);
if (err != 0) return "ERROR: Failed to initialize WSA";
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = to_uint32_t(ip);
if (net::connect(sock, (struct sockaddr*) &sin, sizeof(struct sockaddr_in)) != 0) return "ERROR: Could not connect to host. Code: " + std::to_string(WSAGetLastError());
变量port
是整数(值= 22),其中ip
是字符串(192.168.1.101或72.196.212.127)。此函数返回“无法连接到主机”错误。没有其他错误发生。
这里是to_uint32_t
方法:
std::uint32_t to_uint32_t(const std::string& ip_address)
{
const unsigned bits_per_term = 8;
const unsigned num_terms = 4;
std::istringstream ip(ip_address);
uint32_t packed = 0;
for (unsigned i = 0; i < num_terms; ++i)
{
unsigned term;
ip >> term;
ip.ignore();
packed += term << (bits_per_term * (num_terms - i - 1));
}
return packed;
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ aaliaafrei的)要修复我的代码,我只是将sin.sin_addr.s_addr = to_uint32_t(ip);
切换为inet_pton(AF_INET, ip, &sin.sin_addr);
。