[C sous UNIX] Sockets TCP/IP sous UNIX
Résolu
titi41
Messages postés
76
Statut
Membre
-
titi41 Messages postés 76 Statut Membre -
titi41 Messages postés 76 Statut Membre -
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
- Télévision ip - Guide
- Tcp udp - Guide
- Comment connaître son adresse ip - Guide
- Tcp optimizer - Télécharger - Optimisation
7 réponses
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.
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.
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
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