[Windows] Probleme de connection TCP :/

Probleme de connection TCP :/ [Windows] - C++ - Programmation

Marsh Posté le 20-08-2003 à 11:27:41    

Fichier CNet_comm.cpp
 

Code :
  1. char IG_ip_adress[16];
  2. int size_sock_in = sizeof(sock_in);
  3. //Allowing Windows Sockets initiation
  4. WSAStartup (MAKEWORD(2,0),&wsa);
  5. //Reading conf.ini file
  6. adr_port = atol (ReadIniConfFile("NETWORK", "IG_port" ));
  7. strcpy(IG_ip_adress, ReadIniConfFile("NETWORK", "SS_ip" ));
  8. //Socket initialisation
  9. sock_in.sin_family  = AF_INET;
  10. sock_in.sin_addr.s_addr = INADDR_ANY;//inet_addr(IG_ip_adress);
  11. sock_in.sin_port  = adr_port; /*adr_port vaut 139, je pense que cette instruction est fausse meme si ds le debuggeur sock_in.sin_port vaut 139 non ? */
  12. if (!tcp) {
  13.  //Using UDP protocol
  14.  sock = socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP);
  15.  bind(sock, (SOCKADDR*)&sock_in, sizeof(sock_in));
  16. }
  17. else {
  18.  //Using TCP protocol
  19.  sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
  20.  bind(sock, (SOCKADDR*)&sock_in, sizeof(sock_in));
  21.  //TCP : connected mode
  22.  if(connect(sock,(SOCKADDR*)&sock_in,sizeof(sock_in)))
  23.   printf("TCP connection failed !\n" );
  24. }


le .h :
 

Code :
  1. class CNet_comm : public CFile
  2. {
  3. private :
  4.  WSADATA wsa;     /* Store Windows Sockets initialization information */
  5.  SOCKET sock;     /* Container of the socket */
  6.  SOCKADDR_IN sock_in;   /* Contain which adress to connect the socket */
  7.  long adr_port;  /* Adressee port */
  8.  char ip[16];     /* Adressee ip adress */


 
J'essai de me connecter via TCP a un autre ordi (rezo local de 2 pc). ni l'1 ni l'autre pc n'arrive a se connecter (la fonction en gras "connect" echoue tout le tps :/. Or le protocol UDP marche ! no pb mais j'arrive pas a etablir la connexion sur chacun des 2 postes en TCP. J'vois pas pkoi.
Je pense que c ma fonction htons() qui merde car si je l'utilise comme il faut d'apres la doc MSDN, la variable sock_in a pour num de port un gros chiffre qui n'a rien avoir. Pour que le port soit bien renseigne ds la structure, je dois faire une affectation directe sans passer par la fonction htons. Ce passage la m'est douteux (c peut etre ici que ca merde :/)
Je suis sous W98, VC++6


Message édité par Giz le 20-08-2003 à 11:53:32
Reply

Marsh Posté le 20-08-2003 à 11:27:41   

Reply

Marsh Posté le 20-08-2003 à 12:54:34    

- remplace ton :
sock_in.sin_addr.s_addr = INADDR_ANY; //inet_addr(IG_ip_adress);  
par :
sock_in.sin_addr.S_un.S_addr = inet_addr(IG_ip_adress);
 
 - il faut le htons() :
sock_in.sin_port = htons(adr_port );
(http://msdn.microsoft.com/library/en-us/winsock/winsock/htons_2.asp)
 
 - essaye sans le bind(). normalement il est utile seulement dans le code qui écoute.
 
 - prend l'habitude de tester chaque valeur de retour, et d'appeler WSAGetLastError() après chaque echec d'une fonction socket, ca te donnera direct la raison de cet échec.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed