Windows Winsock仅在连接到本地主机时返回10061

Windows Winsock仅在连接到本地主机时返回10061,windows,networking,winsock,Windows,Networking,Winsock,我不明白发生了什么事。如果我在localhost以外的任何地方创建一个套接字,无论是localhost、127.0.0.1还是机器的外部ip,都可以正常工作。 如果我创建一个地址的套接字,而该端口中没有侦听内容,我将得到一个10060超时,但没有10061超时,这是有意义的。为什么我在访问localhost时被拒绝连接。 我试图禁用防火墙,以防它把事情搞砸了,但事实并非如此 在此之前,我正在做所有WSA初始化的工作 _socketToServer = socket(AF_INET, SO

我不明白发生了什么事。如果我在localhost以外的任何地方创建一个套接字,无论是localhost、127.0.0.1还是机器的外部ip,都可以正常工作。 如果我创建一个地址的套接字,而该端口中没有侦听内容,我将得到一个10060超时,但没有10061超时,这是有意义的。为什么我在访问localhost时被拒绝连接。 我试图禁用防火墙,以防它把事情搞砸了,但事实并非如此

在此之前,我正在做所有WSA初始化的工作

    _socketToServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(_socketToServer == -1){
    return false;
    }

   p_int = (int*)malloc(sizeof(int));
   *p_int = 1;
   if( (setsockopt(_socketToServer, SOL_SOCKET, SO_REUSEADDR, 
       (char*)p_int, sizeof(int)) == -1 )||
       (setsockopt(_socketToServer, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int,
               sizeof(int)) == -1 ) ){
        free(p_int);
        return false;
   }
   free(p_int);


   struct sockaddr_in my_addr;

   my_addr.sin_family = AF_INET ;
   my_addr.sin_port = htons(_serverPort);

   memset(&(my_addr.sin_zero), 0, 8);
   my_addr.sin_addr.s_addr = inet_addr(_serverIP);


   if( connect( _socketToServer, (struct sockaddr*)&my_addr, sizeof(my_addr)) 
        == SOCKET_ERROR ){
    DWORD error = GetLastError(); //here is where I get the 10061
    return false;
}

有什么想法吗?

当连接到另一台机器上的非侦听端口时,不保证会出现WSAETIMEDOUT错误。可能会发生任意数量的不同错误。但是,WSAETIMEDOUT错误通常仅在套接字无法在连接超时之前到达网络上的目标计算机时发生。如果可以到达目标计算机,则WSAECONNREFUSED错误表示目标计算机正在确认连接请求,并且正在回复,表示请求的端口当时无法接受连接,因为它没有侦听或积压已满无法区分是哪一个。因此,当您连接到本地主机时,在连接到非侦听端口时,您几乎总是会遇到WSAECONNreference错误,因为您正在连接到同一台机器,并且在确定端口的侦听状态时没有延迟。它与防火墙或反恶意软件无关。这只是正常的行为。

连接到另一台机器上的非侦听端口时,不保证会出现WSAETIMEDOUT错误。可能会发生任意数量的不同错误。但是,WSAETIMEDOUT错误通常仅在套接字无法在连接超时之前到达网络上的目标计算机时发生。如果可以到达目标计算机,则WSAECONNREFUSED错误表示目标计算机正在确认连接请求,并且正在回复,表示请求的端口当时无法接受连接,因为它没有侦听或积压已满无法区分是哪一个。因此,当您连接到本地主机时,在连接到非侦听端口时,您几乎总是会遇到WSAECONNreference错误,因为您正在连接到同一台机器,并且在确定端口的侦听状态时没有延迟。它与防火墙或反恶意软件无关。这只是正常行为。

听起来确实像防火墙或反恶意软件。您是否正在运行一个正在侦听端口的程序?端口号是多少?您希望收到10060,还是希望实际建立连接?我已尝试90019002…9033。他们都没有工作。我有一个听力程序,但即使我没有,我也会得到同样的结果。它可以从远程客户端工作。实际上,只是为了测试,我试着从同一台机器内通过putty打开端口,并且我能够启动连接!服务器代码自动发送数据,这就是我在终端中看到的。我很困惑这听起来像防火墙或反恶意软件。您是否正在运行一个正在侦听端口的程序?端口号是多少?您希望收到10060,还是希望实际建立连接?我已尝试90019002…9033。他们都没有工作。我有一个听力程序,但即使我没有,我也会得到同样的结果。它可以从远程客户端工作。实际上,只是为了测试,我试着从同一台机器内通过putty打开端口,并且我能够启动连接!服务器代码自动发送数据,这就是我在终端中看到的。我很困惑,谢谢。知道这一点实际上是非常有用的。我感到困惑,因为无论端口如何,我都会收到相同的错误消息。最后,通过重新启动解决了问题。我猜服务器套接字没有真正关闭。我早就应该这么做了。只有Windows服务器在积压工作完成时才会导致ECON/WSAECONN恢复。Unix和Linux服务器导致超时。谢谢。知道这一点实际上是非常有用的。我感到困惑,因为无论端口如何,我都会收到相同的错误消息。最后,通过重新启动解决了问题。我猜服务器套接字没有真正关闭。我早就应该这么做了。只有Windows服务器在积压工作完成时才会导致ECON/WSAECONN恢复。Unix和Linux服务器导致超时。