2010-07-29 4 views
0

J'ai deux interface réseau installé sur l'interface du système client a l'IP 192.168.3.1 et l'interface 2 a l'IP 192.168.5.1, je veux me connecter au système distant qui a ip 192.168. 5.7 mais la connexion ne s'établit pas. Quand je désactiverai l'interface réseau 192.168.3.1 cela fonctionnera bien. je suis en utilisant le code suivantdeux interface réseau côté client ne se connecte pas socket

#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

Pouvez-vous publier le masque de sous-réseau pour chaque interface concernée? –

+0

Frank a probablement raison: '192.168/16' dans la table de routage correspondrait aux deux adresses IP mais à une seule interface. –

Répondre

0

route réseau de trafic dans la première interface, vous devez répondre à cette question, pourquoi la route du trafic réseau en premier (192.168.3.1) interface.

Lorsque vous désactivez le premier routage du trafic d'interface vers la troisième interface. Vous devez vérifier le masque de sous-réseau dans les deux interfaces.

Questions connexes