Rechercher : dans
Par :

Pg serveur tcp sur linux

Dernière réponse le 18 jan 2008 à 00:07:40 tacha84, le 17 jan 2008 à 22:50:54 
 Signaler ce message aux modérateurs

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);

Configuration: Windows XP
Firefox 2.0.0.11

Meilleures réponses pour « pg serveur tcp sur linux » dans :
[Linux] Synchroniser l'horloge système avec un serveur de temps VoirLa commande ntpdate permet de synchroniser l'heure du système Linux avec un serveur de temps, par exemple : ntpdate serveur.de.temps.fr L'adresse suivante recense les serveurs de temps pour la France Si vous êtes dans un autre pays, il est...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Se logguer à distance avec ssh (Linux) Voir(Pour ceux qui voudraient avoir un rappel sur SSH) Les commandes suivantes nécessitent d'avoir un compte sur la machine sur laquelle on veut se connecter et qu'un serveur SSH y soit installé. Sous Linux, la syntaxe est simple (le client...
Configuration d'un serveur d'un réseau TCP/IP sous Linux VoirIntroduction Dans cette partie , nous allons décrire toutes les étapes nécessaires pour configurer votre réseau TCP/IP sur votre serveur. Tout d'abord, nous verrons les types d'adressage IP, ensuite, nous configurerons vos interfaces réseaux et...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...
LDAP - Installation d'un serveur d'annuaire (OpenLDAP sous Linux VoirPrésentation de OpenLDAP OpenLDAP (http://www.openldap.org) est un projet libre de serveur d'annuaire conforme à la norme LDAP 3. Ce serveur, dérivé de l'implémentation mise au point par l'université du Michigan, est développé selon les termes de...

1

 mamiemando, le 18 jan 2008 à 00:07:40

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 */ :

/*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 :
http://www.chiark.greenend.org.uk/~sgtatham/putty/

2) soit à installer un environnement C++ comme dev-cpp ou code::blocks
http://www.bloodshed.net/devcpp.html
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

Répondre à mamiemando