2010-07-29 105 views
0

我有兩個網絡接口安裝在客戶端系統接口一個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

回答

0

交通網絡路由在第一界面,你應該回答這個問題,首先在(192.168.3.1)接口爲何網絡流量路由。

當您禁用第一個接口流量路由到第三個接口時,您必須在兩個接口中檢查子網掩碼。

相關問題