[C sous UNIX] Sockets TCP/IP sous UNIX
Résolu/Fermé
titi41
Messages postés
76
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
22 juin 2010
-
17 avril 2007 à 16:26
titi41 Messages postés 76 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 juin 2010 - 18 avril 2007 à 11:30
titi41 Messages postés 76 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 22 juin 2010 - 18 avril 2007 à 11:30
Bonjour,
Je suis en DUT informatique et je dois faire un petit chat en C sous UNIX (et un jeu en réseau également)
Je suis complètement perdu, on a pas encore vu les sockets.
Est-ce que vous pourriez m'aider ?
Merci de votre réponse
Je suis en DUT informatique et je dois faire un petit chat en C sous UNIX (et un jeu en réseau également)
Je suis complètement perdu, on a pas encore vu les sockets.
Est-ce que vous pourriez m'aider ?
Merci de votre réponse
A voir également:
- [C sous UNIX] Sockets TCP/IP sous UNIX
- Ethernet n'a pas de configuration ip valide - Guide
- Udp vs tcp - Guide
- Télévision ip - Accueil - Streaming
- Tcp optimizer - Télécharger - Optimisation
- Comment connaître son adresse ip - Guide
7 réponses
andejen
Messages postés
148
Date d'inscription
jeudi 9 juin 2005
Statut
Membre
Dernière intervention
30 juillet 2008
22
17 avril 2007 à 16:34
17 avril 2007 à 16:34
Bonjour,
Je te conseille deja ce site la pour commencer:
https://www.frameip.com/winsock/
https://www.frameip.com/c-mode-non-connecte/
https://www.frameip.com/c-mode-connecte/
A savoir qu'il y a vraiment multitude de tutoriaux sur les sockets sur internet.
Bon courage pour ces projets.
Je te conseille deja ce site la pour commencer:
https://www.frameip.com/winsock/
https://www.frameip.com/c-mode-non-connecte/
https://www.frameip.com/c-mode-connecte/
A savoir qu'il y a vraiment multitude de tutoriaux sur les sockets sur internet.
Bon courage pour ces projets.
titi41
Messages postés
76
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
22 juin 2010
3
17 avril 2007 à 16:45
17 avril 2007 à 16:45
si j'ai des erreurs dans mon code, je pourrai vous demander ?
andejen
Messages postés
148
Date d'inscription
jeudi 9 juin 2005
Statut
Membre
Dernière intervention
30 juillet 2008
22
17 avril 2007 à 16:50
17 avril 2007 à 16:50
Oui je pense que y a pas mal de monde ici pret a aider du moment que tu essayes de le faire apr toi meme. :)
Bonnes lectures.
Bonnes lectures.
titi41
Messages postés
76
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
22 juin 2010
3
17 avril 2007 à 18:05
17 avril 2007 à 18:05
J'ai réussi a faire ca, c'est la partie serveur. Mais ca ne compile pas..
Je vous met le code
Je vais essayer de m'attaquer a la partie client.
Merci a vous
Je vous met le code
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <fcntl.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define MAX_SIZE 256 #define PORT 44412 int main(int argc, char *argv[]) { struct hostent *hp = NULL; struct sockaddr_in serv_ad, client_ad; int sin_size,retour; unsigned long addr; int sockd, sockcli; int valide; if (argc != 2) { printf("Probleme d'arguments\n"); exit (1); } hp = argv[1] ; //open the socket if ((sockd=socket(AF_INET, SOCK_DGRAM, 0))==-1) { printf(" error open socket\n"); return -1; } if (setsockopt(sockd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1) { printf(" error set socket options\n"); return -1; } //configuration de serv_ad serv_ad.sin_family=AF_INET; serv_ad.sin_port=htons(PORT); serv_ad.sin_addr.s_addr=hp->h_addr; serv_ad.sin_zero[8]=0; sin_size= hp->h_length; if(bind(sockd, (struct sockaddr*)&serv_ad,sin_size)==-1) { printf(" error bind\n"); return -1; } if (connect(sockd,(struct sockaddr*)&serv_ad,sin_size)==1) { printf(" error connect\n"); return -1; } if (send(sockd,(char*)&serv_ad,sizeof(serv_ad),0)==-1) { printf(" error send\n"); return -1; } while(1) { // lancement de l'attente de connexion client if (listen(sockd,5)==-1) { printf(" error listen\n"); return -1; } if (accept(sockd,(struct sockaddr*)&serv_ad,&sin_size)==-1) { printf(" error accept\n"); return -1; } // dialogue avec le client retour = recv(socket,(char*)&serv_ad,sizeof(serv_ad),0 ); if (retour == -1) { printf(" error recv\n"); return -1; } retour = send(socket,(char*)&serv_ad,sizeof(serv_ad),0 ); if (retour == -1) { printf(" error send\n"); return -1; } // fermeture socket client shutdown(sockcli,1); exit(0); } close(sockcli); return 0; }
Je vais essayer de m'attaquer a la partie client.
Merci a vous
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
titi41
Messages postés
76
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
22 juin 2010
3
17 avril 2007 à 20:45
17 avril 2007 à 20:45
Et voila ma partie client.
Mais je n'ai pas pu tester
Quelqu'un peu m'aider ?
Merci beaucoup
Mais je n'ai pas pu tester
#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define TAILLEMAX 256 #define PORT 44412 /* programme client */ main(int argc, char *argv[]) { int sd,lon,valide,retour; struct sockaddr_in adsock; struct hostent *hptr ; /* infos recuperes sur le host */ char buf[TAILLEMAX] ; /*buffer de lecture des infos */ char *host ; /*pointeur sur le nom du host distant */ char *mesg ; if (argc != 2) { printf("Probleme d'arguments\n"); exit (1); } host = argv[1] ; lon=sizeof (hp->h_addr); adsock.sin_family=AF_INET; adsock.sin_port=htons(PORT); memset (&adsock.sin_zero[8], 0, 1); memcpy (&adsock.sin_addr.s_addr, &hp->h_addr, lon); if ((sd=socket(AF_INET, SOCK_DGRAM, 0))==-1) { printf(" error open socket\n"); return -1; } if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &valide, sizeof(int))==-1) { printf(" error set socket options\n"); return -1; } if (connect(sd,(struct sockaddr*)&adsock,lon)==1) { printf(" error connect\n"); return -1; } retour = send(sd,(char*)&adsock,sizeof(adsock),0 ); if (retour == -1) { printf(" error send\n"); return -1; } retour = recv(sd,(char*)&adsock,sizeof(adsock),0 ); if (retour == -1) { printf(" error recv\n"); return -1; } shutdown(sd); close(sd) ; exit(0) ; }
Quelqu'un peu m'aider ?
Merci beaucoup
andejen
Messages postés
148
Date d'inscription
jeudi 9 juin 2005
Statut
Membre
Dernière intervention
30 juillet 2008
22
18 avril 2007 à 10:38
18 avril 2007 à 10:38
donne les erreurs que le compilo te renvoie j'ai un peu la flemme de lire tout le code sans cibler le problème et je pense que je ne suis pas le seul ^^
titi41
Messages postés
76
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
22 juin 2010
3
18 avril 2007 à 11:30
18 avril 2007 à 11:30
J'ai modifié mon approche et tout recommencé depuis le début. Ca a l'air de marcher, mais ce n'est pas encore fini.
Merci de ton aide andejen
Merci de ton aide andejen