Socket Adresse IP

Socket Adresse IP - C - Programmation

Marsh Posté le 13-05-2006 à 23:00:24    

Bonjour,
 
J'aimerais savoir comment modifier mon source pour que l'utilisateur spécifie l'adresse IP et le Port durant l'execution du programme plutot que de les saisir directement dans la source.
 
Merci.  :p  
 

Code :
  1. #include "port_serie.h"
  2. //#pragma comment(lib, "wsock32.lib" )
  3. int sock(SOCKET *pt_descripteur)
  4. {
  5. WSADATA wsaData; // Initialisation d'une variable WSADATA
  6. int res;
  7. struct sockaddr_in sock;
  8. char *adresse = "192.168.0.1"; // Adresse du pc distant
  9. res = WSAStartup(MAKEWORD(1,0), &wsaData);
  10. *pt_descripteur = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);
  11. if (*pt_descripteur != SOCKET_ERROR)
  12. {
  13.  sock.sin_family = AF_INET;
  14.  sock.sin_port = htons(1024);  // Définition de port
  15.  sock.sin_addr.s_addr = inet_addr(adresse);
  16. }
  17. if(connect(*pt_descripteur, (struct sockaddr*) (&sock), sizeof(sock)) == SOCKET_ERROR)
  18. errors();
  19. return 0;
  20. }
  21. int envoi(char *pt_buf,SOCKET descripteur)
  22. {
  23. if(send(descripteur, pt_buf, strlen(pt_buf), 0) == SOCKET_ERROR)
  24. errors();
  25. return 0;
  26. }
  27. int fermeture(SOCKET *pt_descripteur)
  28. {
  29. closesocket(*pt_descripteur);
  30. WSACleanup();
  31. return 1;
  32. }


Message édité par Atlanted le 14-05-2006 à 11:02:54
Reply

Marsh Posté le 13-05-2006 à 23:00:24   

Reply

Marsh Posté le 14-05-2006 à 10:48:00    

c'est du français ça... soit un peu plus explicite. Puis c'est pas "le source" mais "la source"...

Reply

Marsh Posté le 14-05-2006 à 11:34:55    

Salut,

Code :
  1. int sock(SOCKET *pt_descripteur, char *adresse)
  2. ...
  3. /*
  4.     char *adresse = "192.168.0.1"; // Adresse du pc distant
  5. */
  6. ...


?

Reply

Marsh Posté le 14-05-2006 à 11:51:52    

Ok merci j'ai réussi. Parcontre pour le port ça a l'air différent car sur le même principe ça ne fonctionne pas.

Message cité 1 fois
Message édité par Atlanted le 14-05-2006 à 12:06:16
Reply

Marsh Posté le 14-05-2006 à 12:17:34    

Atlanted a écrit :

Ok merci j'ai réussi. Parcontre pour le port ça a l'air différent car sur le même principe ça ne fonctionne pas.


 

Code :
  1. #include "port_serie.h"
  2. //#pragma comment(lib, "wsock32.lib" )
  3. int sock(SOCKET *pt_descripteur, char *adresse, int port)
  4. {
  5. WSADATA wsaData; // Initialisation d'une variable WSADATA
  6. int res;
  7. struct sockaddr_in sock;
  8. // char *adresse = "192.168.0.1"; // Adresse du pc distant
  9. res = WSAStartup(MAKEWORD(1,0), &wsaData);
  10. *pt_descripteur = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);
  11. if (*pt_descripteur != SOCKET_ERROR)
  12. {
  13.  sock.sin_family = AF_INET;
  14.  sock.sin_port = htons(port);  // Définition de port
  15.  sock.sin_addr.s_addr = inet_addr(adresse);
  16. }
  17. if(connect(*pt_descripteur, (struct sockaddr*) (&sock), sizeof(sock)) == SOCKET_ERROR)
  18. errors();
  19. return 0;
  20. }


 
Tu appelles la fonction "sock" en lui passant en 2° paramètre la chaîne "x.y.z.t" et en 3° le n° de port
 
Sinon, petite remarque, dans ton 1er code, tu as écrit ceci

Atlanted a écrit :

Code :
  1. char *adresse = "192.168.0.1";



 
Je pense qu'il vaut mieux écrire ceci

Code :
  1. char adresse[] = "192.168.0.1";


Dans le premier cas, tu définis un pointeur pointant vers une zone statique de ta mémoire probablement invariable. Tu ne peux pas modifier le contenu de "*adresse" (si jamais t'en avais envie).
Dans le 2° cas, tu définis un tableau d'octets suffisemment grand pour contenir ta chaîne et tu peux le modifier ensuite.
Dans tous les cas, le fonctionnement de ta fonction reste le même...

Message cité 1 fois
Message édité par Sve@r le 14-05-2006 à 12:33:21

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-05-2006 à 12:25:00    

moi23372 a écrit :

c'est du français ça... soit un peu plus explicite. Puis c'est pas "le source" mais "la source"...


Perdu.

Reply

Marsh Posté le 14-05-2006 à 12:27:58    

Ok merci, je vais essayer d'intégrer ça dans ma MFC maintenant.

Reply

Marsh Posté le 20-05-2006 à 13:45:40    

Sve@r a écrit :

Je pense qu'il vaut mieux écrire ceci

Code :
  1. char adresse[] = "192.168.0.1";


tu définis un tableau d'octets suffisemment grand pour contenir ta chaîne et tu peux le modifier ensuite.
Dans tous les cas, le fonctionnement de ta fonction reste le même...


Modifier, genre  

Code :
  1. char adresse[] = "192.168.0.1";
  2. <...>
  3. strcpy(adresse, "192.168.0.10" ); /* BOUM */


Ou alors comme ça :  

Code :
  1. char adresse[sizeof "255.255.255.255"] = "192.168.0.1";
  2. <...>
  3. strcpy(adresse, "192.168.0.254" );


Là, c'est OK.


Message édité par Emmanuel Delahaye le 20-05-2006 à 13:46:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 20-05-2006 à 13:57:25    

moi23372 a écrit :

c'est du français ça... soit un peu plus explicite. Puis c'est pas "le source" mais "la source"...


perdu ! le programme d'un logiciel se nomme LE source
 
[:benou_grilled]

Message cité 1 fois
Message édité par Harkonnen le 20-05-2006 à 13:57:54

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-05-2006 à 14:20:44    

Harkonnen a écrit :

perdu ! le programme d'un logiciel se nomme LE source


"Le code source" qui est devenu par simplification (abusive, AMA) "le source".


Message édité par Emmanuel Delahaye le 20-05-2006 à 14:21:12

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

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