WinSock2未发送连接请求

问题描述 投票:-1回答:1

我一直在尝试从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;
}
c++ networking winsock2
1个回答
0
投票

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ aaliaafrei的)要修复我的代码,我只是将sin.sin_addr.s_addr = to_uint32_t(ip);切换为inet_pton(AF_INET, ip, &sin.sin_addr);

© www.soinside.com 2019 - 2024. All rights reserved.