Pg serveur tcp sur linux
Bonjour,j'ai un exercice à faire c très urgent pour demin
realiser le programme d'un serveur TCP qui prend en argument un numero de port.Ce serveur crée une socket et l'attache à ce numéro de ort.ensuite,il doit commencer par écoter le réseau en attente des demandes de connexios et accepter jusqu'à deux connexions avant de fermer les socket.Pour chaque connexion acceptée,il doit afficher l'adresse du client et le descripteur de la nouvelle socket de service.Après avoir accepté deux connexions,il doit attendre la frappe d'une touche pour fermer toutes les socket.
j'ai realisé ce programme mais je sais pas est ce qu'il marche ou pas car j'ai pas d'unix sur mon pc.svp qq'un l'execute et m envoie un imprime ecran de l'execution sur mon mail ca_winners_ca@hotmail.com.merci beaucoup.
c trè ur
#include<stdio.h>
#include<unistd.h>
#include<sys/typees.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdlib.h>
int main(int arg c,char **argv)
{
int i,res,sock_ecoute,sock_srvice(2),taille_adr;
struct sockaddr_in adresse_loc,adresse_dist;
char c;
if (argc!=2){
printf("usage:%s<port_num\n",argv[0]);
exit(1);
}
/*creation de socket
sock_ecoute=socket(AF_INET,SOCK_STRAEM,0);
if(sock_ecoute==-1){
perror("socket");
exit(2);
}
else printf("socket cree\n");
/* preparation de l'adresse locale
adresse_loc.sin_family=AF_INET;
adresse_loc.sin_port=htons(atoi(argv[1]));
adresse_loc.sin_addr.s_addr=hton1(INADDR_ANY); /*INADDR_ANY donne ladresse ip de la machine locale*/
/*attachement du socket
res=bind'sock_ecoute,(struct sockaddr *)&adresse_loc,sizeof(*adresse_loc));
if (res==-i){
perror(bind");
exit(3);
}
else
printtf("socket attaché\n");
printf"serveur TCP sur port numéro %d\n",adresse_loc.sin_port);
/*debut de l'ecoute
res=listen(sock_ecoute,10);
if(res==-1){
perror("listen");
exit(4);
}
else
printf("Serveur TCP commence l'ecoute\n");
/*prise en compte de deux connexions
taille_adr=sizeof(adresse_dist);
for(i=0;i<1;i++){
sock_service[i]=accept(sock_ecoute,(struct sockaddr *)&adresse_dist,&taille_adr);
if(res==-1){
perror("accept");
}
printf("demande de connexion venant de l'hote %s\n" inet_ntoa(adresse_dist.sin_addr));
printf("descripteur du socket de service %d\n",sock_service[i]);
if(i==0)
printf("serveur attend seconde connexion\n");
else
printf("les deux connexions se sont bien deroulées\n");
}
printf("RETURN pour deconnecter les sockets du serveur\n");
scanf("%c",&c); /*attente d'un return*/
/*fermeture des deux socket de service
for(i=0;i<2;i++)
{
res=close(sock_service[i]);
if(res==-1)
{
perror("close");
}
}
/*fermeture de socket d'ecoute
res=close(sock_ecoute);
if (res==-1){
perror(close socket d'ecoute");
exit(5);
}
reeturn(0);
realiser le programme d'un serveur TCP qui prend en argument un numero de port.Ce serveur crée une socket et l'attache à ce numéro de ort.ensuite,il doit commencer par écoter le réseau en attente des demandes de connexios et accepter jusqu'à deux connexions avant de fermer les socket.Pour chaque connexion acceptée,il doit afficher l'adresse du client et le descripteur de la nouvelle socket de service.Après avoir accepté deux connexions,il doit attendre la frappe d'une touche pour fermer toutes les socket.
j'ai realisé ce programme mais je sais pas est ce qu'il marche ou pas car j'ai pas d'unix sur mon pc.svp qq'un l'execute et m envoie un imprime ecran de l'execution sur mon mail ca_winners_ca@hotmail.com.merci beaucoup.
c trè ur
#include<stdio.h>
#include<unistd.h>
#include<sys/typees.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdlib.h>
int main(int arg c,char **argv)
{
int i,res,sock_ecoute,sock_srvice(2),taille_adr;
struct sockaddr_in adresse_loc,adresse_dist;
char c;
if (argc!=2){
printf("usage:%s<port_num\n",argv[0]);
exit(1);
}
/*creation de socket
sock_ecoute=socket(AF_INET,SOCK_STRAEM,0);
if(sock_ecoute==-1){
perror("socket");
exit(2);
}
else printf("socket cree\n");
/* preparation de l'adresse locale
adresse_loc.sin_family=AF_INET;
adresse_loc.sin_port=htons(atoi(argv[1]));
adresse_loc.sin_addr.s_addr=hton1(INADDR_ANY); /*INADDR_ANY donne ladresse ip de la machine locale*/
/*attachement du socket
res=bind'sock_ecoute,(struct sockaddr *)&adresse_loc,sizeof(*adresse_loc));
if (res==-i){
perror(bind");
exit(3);
}
else
printtf("socket attaché\n");
printf"serveur TCP sur port numéro %d\n",adresse_loc.sin_port);
/*debut de l'ecoute
res=listen(sock_ecoute,10);
if(res==-1){
perror("listen");
exit(4);
}
else
printf("Serveur TCP commence l'ecoute\n");
/*prise en compte de deux connexions
taille_adr=sizeof(adresse_dist);
for(i=0;i<1;i++){
sock_service[i]=accept(sock_ecoute,(struct sockaddr *)&adresse_dist,&taille_adr);
if(res==-1){
perror("accept");
}
printf("demande de connexion venant de l'hote %s\n" inet_ntoa(adresse_dist.sin_addr));
printf("descripteur du socket de service %d\n",sock_service[i]);
if(i==0)
printf("serveur attend seconde connexion\n");
else
printf("les deux connexions se sont bien deroulées\n");
}
printf("RETURN pour deconnecter les sockets du serveur\n");
scanf("%c",&c); /*attente d'un return*/
/*fermeture des deux socket de service
for(i=0;i<2;i++)
{
res=close(sock_service[i]);
if(res==-1)
{
perror("close");
}
}
/*fermeture de socket d'ecoute
res=close(sock_ecoute);
if (res==-1){
perror(close socket d'ecoute");
exit(5);
}
reeturn(0);
A voir également:
- Pg serveur tcp sur linux
- Tcp udp - Guide
- Tcp optimizer - Télécharger - Optimisation
- Changer serveur dns - Guide
- Linux reader - Télécharger - Stockage
- Tcp view - Télécharger - Divers Réseau & Wi-Fi
1 réponse
Le truc c'est qu'en postant ton sujet à 22h50 pour le lendemain tu ne mets pas toutes les chances de ton côté :s
Malheureusement ce programme n'a hélas aucune chance de compiler car il y a beaucoup de fautes :
1) les commentaires /* doivent être fermé par */ :
2) il manque des guillemets
3) il y a un e en trop à return, l'accolade du main n'est pas fermée. il y a un e en trop à #include<sys/typees.h>
4) return n'est pas une fonction donc pas de parenthèse :
5) tu as écris arg c au lieu de argc
6) il y a des problèmes de parenthèses
7) ... des fautes de frappes :
8) ... et des virgules manquantes :
Voici une version partiellement corrigée (mais qui ne compile pas et vu l'heure je vais m'arrêter là) :
Il reste encore les erreurs :
Afin que tu puisse travailler sous windows je t'invite très fortement :
1) soit à installer putty et à te connecter à un serveur linux :
https://www.chiark.greenend.org.uk/~sgtatham/putty/
2) soit à installer un environnement C++ comme dev-cpp ou code::blocks
http://www.bloodshed.net/
http://www.codeblocks.org/
3) soit à installer cygwin (pour avoir sous windows l'équivalent d'un linux). Tu peux en outre installer un compilateur (g++), et openssh (en particulier le client ssh) pour pouvoir te connecter en ssh sur un serveur linux si besoin
http://www.cygwin.com/
4) soit installer linux :-)
Bonne chance
Malheureusement ce programme n'a hélas aucune chance de compiler car il y a beaucoup de fautes :
1) les commentaires /* doivent être fermé par */ :
/*creation de socket */ ...
2) il manque des guillemets
perror("bind");
perror("close socket d'ecoute");
3) il y a un e en trop à return, l'accolade du main n'est pas fermée. il y a un e en trop à #include<sys/typees.h>
4) return n'est pas une fonction donc pas de parenthèse :
return 0;
5) tu as écris arg c au lieu de argc
6) il y a des problèmes de parenthèses
res=bind(sock_ecoute,(struct sockaddr *)&adresse_loc,sizeof(*adresse_loc));
printf("serveur TCP sur port numéro %d\n",adresse_loc.sin_port);
7) ... des fautes de frappes :
int i,res,sock_ecoute,sock_service(2),taille_adr; sock_ecoute=socket(AF_INET,SOCK_STREAM,0);
8) ... et des virgules manquantes :
printf("demande de connexion venant de l'hote %s\n",inet_ntoa(adresse_dist.sin_addr));
Voici une version partiellement corrigée (mais qui ne compile pas et vu l'heure je vais m'arrêter là) :
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/un.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdlib.h>
int main(int argc,char **argv){
int i,res,sock_ecoute,sock_service(2),taille_adr;
struct sockaddr_in adresse_loc,adresse_dist;
char c;
if (argc!=2){
printf("usage:%s<port_num\n",argv[0]);
exit(1);
}
//creation de socket
sock_ecoute=socket(AF_INET,SOCK_STREAM,0);
if(sock_ecoute==-1){
perror("socket");
exit(2);
}
else printf("socket cree\n");
// preparation de l'adresse locale
adresse_loc.sin_family=AF_INET;
adresse_loc.sin_port=htons(atoi(argv[1]));
adresse_loc.sin_addr.s_addr=hton1(INADDR_ANY); //INADDR_ANY donne ladresse ip de la machine locale*/
//attachement du socket
res=bind(sock_ecoute,(struct sockaddr *)&adresse_loc,sizeof(*adresse_loc));
if (res==-i){
perror("bind");
exit(3);
}
else printf("socket attaché\n");
printf("serveur TCP sur port numéro %d\n",adresse_loc.sin_port);
//debut de l'ecoute
res=listen(sock_ecoute,10);
if(res==-1){
perror("listen");
exit(4);
}
else
printf("Serveur TCP commence l'ecoute\n");
//prise en compte de deux connexions
taille_adr=sizeof(adresse_dist);
for(i=0;i<1;i++){
sock_service[i]=accept(sock_ecoute,(struct sockaddr *)&adresse_dist,&taille_adr);
if(res==-1){
perror("accept");
}
printf("demande de connexion venant de l'hote %s\n",inet_ntoa(adresse_dist.sin_addr));
printf("descripteur du socket de service %d\n",sock_service[i]);
if(i==0)
printf("serveur attend seconde connexion\n");
else
printf("les deux connexions se sont bien deroulées\n");
}
printf("RETURN pour deconnecter les sockets du serveur\n");
scanf("%c",&c); //attente d'un return*/
//fermeture des deux socket de service
for(i=0;i<2;i++)
{
res=close(sock_service[i]);
if(res==-1)
{
perror("close");
}
}
//fermeture de socket d'ecoute
res=close(sock_ecoute);
if (res==-1){
perror("close socket d'ecoute");
exit(5);
}
return 0;
}
Il reste encore les erreurs :
(mando@aldur) (~) $ g++ -W -Wall plop.cpp plop.cpp: In function ‘int main(int, char**)’: plop.cpp:32: error: ‘hton1’ was not declared in this scope plop.cpp:36: error: no match for ‘operator*’ in ‘*adresse_loc’ plop.cpp:58: error: invalid types ‘int[int]’ for array subscript plop.cpp:58: error: invalid conversion from ‘int*’ to ‘socklen_t*’ plop.cpp:58: error: initializing argument 3 of ‘int accept(int, sockaddr*, socklen_t*)’ plop.cpp:62: error: ‘inet_ntoa’ was not declared in this scope plop.cpp:63: error: invalid types ‘int[int]’ for array subscript plop.cpp:76: error: invalid types ‘int[int]’ for array subscript
Afin que tu puisse travailler sous windows je t'invite très fortement :
1) soit à installer putty et à te connecter à un serveur linux :
https://www.chiark.greenend.org.uk/~sgtatham/putty/
2) soit à installer un environnement C++ comme dev-cpp ou code::blocks
http://www.bloodshed.net/
http://www.codeblocks.org/
3) soit à installer cygwin (pour avoir sous windows l'équivalent d'un linux). Tu peux en outre installer un compilateur (g++), et openssh (en particulier le client ssh) pour pouvoir te connecter en ssh sur un serveur linux si besoin
http://www.cygwin.com/
4) soit installer linux :-)
Bonne chance