RESEAU PAR SOCKET EN C

aziatedu13 Messages postés 19 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 20 février 2008 - 26 sept. 2007 à 17:00
Bug_Bug Messages postés 9 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 2 octobre 2007 - 2 oct. 2007 à 14:25
bonjour,

je veux faire un truk extremement simple pour certain, mais assez très difficile pour moi..
voila je souhaiterai pouvoir afficher dans une console, une chaine de caractere envoyer par le prog serveur.
je m'explik, 2 application tourne sur le meme pc, une serveur et l'autre client.
le serveur envoie une chaine de caractere via un sockete, et le client la récupere et l'affiche.
c'est trop dur pour moi la....

voici mes 2 code:

coté serveur :
#include <stdio.h>

#include

#include

#include <netdb.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <sys/socket.h>

 

 

#define INADDR_ANY "192.168.1.1"

main()

{

int sock,sock2;

struct sockaddr_in adresse;

char buffer[20]="sa marche pas";

adresse.sin_port=1234;

adresse.sin_addr.s_addr="192.168.1.1";

sock=socket(AF_INET,SOCK_DGRAM,0);

bind(sock,(struct in_addr*)&adresse,sizeof(struct sockaddr_in));

listen(sock,5);

sock2=accept(sock,&adresse,sizeof(struct sockaddr_in));

if(write(sock2, buffer, strlen(buffer)) == NULL)

printf ("Erreur d'envoi vers le client : erreur %d.\n\n", 1);

else

printf ("Envoi vers le client ok.\n\n",buffer,sock2);

}

coté client :

#include <stdio.h>

#include

#include

#include <netdb.h>

#include <netinet/in.h>

#include <sys/types.h>

#include <sys/socket.h>

#define INADDR_ANY "192.168.1.1"

main()

{

int sock,sock2;

struct sockaddr_in adresse;

char buffer[20];

adresse.sin_port=1234;

//strcpy(adresse.sin_addr.s_addr,"192.168.1.1");

 

 

sock=socket(AF_INET,SOCK_DGRAM,0);

connect(sock,&adresse,sizeof(struct sockaddr_in));

read(sock,buffer,20);

printf("buffer=%s",buffer);

}

merci de votre aide, et de vos explication.

4 réponses

gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
26 sept. 2007 à 23:46
//strcpy(adresse.sin_addr.s_addr,"192.168.1.1");

pourquoi en commentaire ton client se connecte null part
0
aziatedu13 Messages postés 19 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 20 février 2008
27 sept. 2007 à 08:31
Je ne pourrai aps refaire des essai, je ne susi pas au bolot jusqua lundi.

masi tu croi que cc'est ça??
le reste est bien écrit???

nouveau developpeur, dans le cadre de ses étude.
0
aziatedu13 Messages postés 19 Date d'inscription mercredi 3 janvier 2007 Statut Membre Dernière intervention 20 février 2008
1 oct. 2007 à 09:30
meme avec cette ligne, le prog ne marche pas....je ne sait vraiment pas comment faire et pourquoi sa bug...
j'ai des warning comme quoi, l'argumlenet 2 de connect n'est pas compatible, alors que je met bien une adresse IP...j'ai essayer beaucoup de chose comme strcopy, ou meme sans strcopy du style adresse.adresse.sin_addr.s_addr = "192.168.1.1";

masi rien n'y fait....

AIDER MOI SVP !!

nouveau developpeur, dans le cadre de ses étude.
0
Bug_Bug Messages postés 9 Date d'inscription dimanche 22 juillet 2007 Statut Membre Dernière intervention 2 octobre 2007
2 oct. 2007 à 14:25
SERVEUR:



 




aziatedu13 à écrit: > #define INADDR_ANY
"192.168.1.1"



 




C'est quoi ça ? (déjà tu l'as définie son l'utiliser dans
ton code)


Dans un serveur on n'as pas besoin de présiser l'IP car
c'est le client qui ce connecte au serveur. (C’est le client qui a besoin de
connaître l'adresse du serveur).


On utilise donc la constante INADDR_ANY comme ceci:



sin.sin_addr.s_addr
= INADDR_ANY;    ou bien





sin.sin_addr.s_addr
= htonl (INADDR_ANY);






 





aziatedu13 à écrit: > adresse.sin_port=1234;


Non ! il faut utiliser la fonction htons (Host to Network
Short) pour transformer la valeur en "Host Byte Order", cf:
http://www.chez.com/vidalc/lf/socket.html 
(la partie structs),


Donc il faut faire:


adresse.sin_port = htons (1234);



 




Et aussi faut revoir les arguments de ton connect() (dans le
client) ; il y plein d'autres erreurs dans ton code (serveur et client). Il
n y a pas de gestion d'erreurs dans ton code pour voir d'où viens les erreurs !



 




Je te conseille Donc de voir et essayer de comprendre cette
source que j'ai mis sur ce site:  [codes/COMMUNICATION-CLIENT-SERVEUR-TRANSMITION-DONNEES-TRAMES-SOCKETS-LANGAGE_44025.aspx http://www.cppfrance.com/codes/COMMUNICATION-CLIENT-SERVEUR-TRANSMITION-DONNEES-TRAMES-SOCKETS-LANGAGE_44025.aspx]



 




C’est du code portable, il compile sous windows et linux



 




Ensuite d'essayer d'améliorer ton code. Puis si t'as des
questions pose les.



 





 
0
Rejoignez-nous