客户端的两个网络接口没有连接套接字

问题描述:

我有两个网络接口安装在客户端系统接口一个IP为192.168.3.1,接口2为IP 192.168.5.1,我想连接到具有IP 192.168的远程系统。 5.7但连接不成立。当我禁用网络接口192.168.3.1它会正常工作。我使用下面的代码客户端的两个网络接口没有连接套接字

#include "windows.h" 
#include "stdio.h" 
#include "conio.h" 
#include "winsock2.h" 

bool Connect(const char *addr_name, int port) 
{ 
    int ErrorCode=0; 
    SOCKET Socket; 

    ::WSAData wsa_data; 
    ErrorCode = ::WSAStartup(MAKEWORD(1, 1), &wsa_data); 
    if(ErrorCode != 0) 
     return ErrorCode; 

    // Get binary address to connect to 
    u_long addr = inet_addr(addr_name); 

    if (addr == INADDR_NONE) 
     ErrorCode=1; 
    else 
    { 
     // Allocate socket 
     Socket = ::socket(AF_INET, SOCK_STREAM, 0); 
     if (Socket == INVALID_SOCKET) 
      ErrorCode = ::WSAGetLastError(); 
     else 
     { 
      // Set up sockaddr_in for connect 
      sockaddr_in sin; 
      memset(&sin, 0, sizeof(sin)); 
      sin.sin_family = AF_INET; 
      sin.sin_port = ::htons((u_short)port); 
      sin.sin_addr.s_addr = addr; 

      // Connect the socket to the address 
      if (::connect(Socket, (sockaddr*) &sin, sizeof(sin)) == SOCKET_ERROR) 
      { 
       ErrorCode = ::WSAGetLastError(); 
       ::closesocket(Socket); 
       Socket = INVALID_SOCKET; 
      } 
     } 
    } 

    return ErrorCode == 0; 
} 

void main(int argc,char** argv) 
{ 
    Connect("192.168.5.7",1258); 
} 
+1

你可以发布涉及的每个接口的子网掩码吗? – 2010-07-29 11:11:48

+0

Frank可能是正确的 - 路由表中的“192.168/16”可以匹配两个IP,但只能匹配一个接口。 – 2010-07-29 15:26:43

交通网络路由在第一界面,你应该回答这个问题,首先在(192.168.3.1)接口为何网络流量路由。

当您禁用第一个接口流量路由到第三个接口时,您必须在两个接口中检查子网掩码。