# Socket client / serveur

**URL:** <https://www.debian-fr.org/t/socket-client-serveur/75823>\
**Category:** Programmation\
**Created:** [Février 3, 2018, 11:35 UTC](https://www.debian-fr.org/t/socket-client-serveur/75823 "2018-02-03T11:35:04Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Medback](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/e0b2c6/32.png) [@Medback](https://www.debian-fr.org/u/Medback)\
**Post date:** [Février 3, 2018, 11:35 UTC](https://www.debian-fr.org/t/socket-client-serveur/75823/1 "2018-02-03T11:35:04Z")

</div>

Bonjour,

j’ai un simple code en C pour établir une connexion entre client et serveur

le serveur est toujours en écoute  
le client envoi un message au serveur  
le serveur répond par la bonne réception

Socket\_Client :

```auto
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>

int main()
{
struct sockaddr_in sockserver;
char buffer[512];
int c;
in_addr_t adresse_serveur = inet_addr("127.0.0.1");

bzero(&sockserver,sizeof(sockserver));
bcopy(&adresse_serveur,&sockserver.sin_addr, sizeof(adresse_serveur));

sockserver.sin_family=AF_INET;
sockserver.sin_port=htons(3333);

//CrÃ©ation socket client
c=socket(AF_INET, SOCK_STREAM,0);

// Connexion au serveur
if(connect(c,(struct sockaddr *)&sockserver,sizeof(sockserver)) < 0) {
	printf("Erreur de connexion !! \n");
	exit(1);
	}

//Envoyer un message au serveur
write(c, "bonjour serveur \n", 512);

//Recvoir du message client
read(c, buffer, 512);
printf("Message serveur: %s \n", buffer);

//Terminer
close(c);
}

```

Socket\_Server :

```auto
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>

int main ()
{
int d,dc, taille_addrc;
char buf[512];
struct sockaddr_in addrs, addrc;

// crÃ©ation de la socket
d=socket(AF_INET, SOCK_STREAM, 0);

bzero(&addrs,sizeof(addrs));

//fonction bind
addrs.sin_family=AF_INET;
addrs.sin_port=htons(3333);
addrs.sin_addr.s_addr=htonl(INADDR_ANY);

bind(d, (struct sockaddr *)&addrs, sizeof(addrs));

//Ecoute
listen(d,5);
taille_addrc=sizeof(addrc);

while (1)
{ // Fonction accept
	dc=accept(d, (struct sockaddr *)&addrc, &taille_addrc);

//Recevoir le message du client
	read(dc,buf, 512);
	printf("Message reÃ§u: %s\n ",buf);
// Envoyer un message au client
	write(dc,"bien reÃ§u \n",512);
	

}
return 0;
}

```

je suis un débutant sur la programmation en C, et je voulu avoir de l’aide afin de modifier les deux programmes et avoir le résultat suivant :

- le client envoi un url (page html en local) au serveur (je travail sur VM sous virtalbox)
- le serveur répond par le continue de la page ou ouvre directement la page sur navigateur.

Merci,

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 3, 2018, 12:01 UTC](https://www.debian-fr.org/t/socket-client-serveur/75823/2 "2018-02-03T12:01:18Z")

</div>

> [@Medback](#):
>
> le client envoi un url (page html en local) au serveur (je travail sur VM sous virtalbox)

Bon, ben là c’est trivial: tu remplaces le message qu’envoie le client par l’url à pomper.

> [@Medback](#):
>
> répond par le continue de la page

Alors dans le code du serveur entre //Recevoir le message du client et // Envoyer un message au client  
tu vas ouvrir un deuxiéme socket, sur le port 80 du serveur désigné par l’url (80 si l’url est http, sinon, sur https, je sais pas si l’encryptage va pas poser probléme).  
Là, tu envoies sur ce socket 2 avec write() un GET \<le chemin de l’url sans le ndd\> HTTP/1.0\r\n\r\n sur ton socket depuis le serveur, et avec read tu chopes en retour le contenu de la page.  
Aprés, tu n’as plus qu’à retransmettre dans le premier socket, pour le client.  
A lire [https://stackoverflow.com/questions/24321295/how-can-i-download-a-file-using-c-socket-programming](https://stackoverflow.com/questions/24321295/how-can-i-download-a-file-using-c-socket-programming)

[quote=«&nbsp;Medback, post:1, topic:75823&nbsp;»]  
ouvre directement la page sur navigateur.  
[/quote]Si tu parles d’afficher le contenu sur le client, tu sauves ce contenu dans un fichier, par exemple, et tu lances ton navigateur dessus avec la commande C «&nbsp;system&nbsp;»:  
[http://ahmed-mohamed.developpez.com/tutoriels/c-plus-plus/fonction-system/](http://ahmed-mohamed.developpez.com/tutoriels/c-plus-plus/fonction-system/)

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Février 3, 2018, 12:03 UTC](https://www.debian-fr.org/t/socket-client-serveur/75823/3 "2018-02-03T12:03:32Z")

</div>

Juste une remarque: si tu n’es pas contraint au C, il y a des langages plus adaptés à ce genre de manips, comme php, python ou perl.
