begin process at 2012 02 10 08:22:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

Chat en C sous Linux


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Chat en C sous Linux

mardi 18 janvier 2005 à 12:08:19 | Chat en C sous Linux

slobberbone

Bonjour à tous et bonne Année 2005 !

Voilà j'ai un projet à faire, il consiste à faire une messagerie instantanée ( Client & Serveur )
J'arrive à faire communiquer un client avec le serveur :

Le client :

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

//#define DATA "ca marche\n"

int main (int argc, char *argv[]){

  char msg[100];
  char rc;
  char buf[1024];
  int sock;
  int port;
  struct sockaddr_in name;
    struct hostent *gethostbyname();
   
    //creation du message
        printf("entrer un port :\n");
        scanf(" %d",&port);


    //initialisation de socket
      bzero(&name, sizeof(name));
            bzero(&name, sizeof(name));       
   
    sock=socket(AF_INET, SOCK_STREAM, 0);
    if(sock<0){
        perror("socket");
        return 1;
    }   

    name.sin_family=AF_INET;

    //structure de name :   

    //port 9999 (arbitraire)
    name.sin_port=htons(port);
    name.sin_addr.s_addr=inet_addr("127.0.0.1");
   
    fprintf(stdout,"client IP : %s, port: %d \n", inet_ntoa(name.sin_addr), ntohs(name.sin_port));
      //connection au serveur
    if(connect(sock,(struct sockaddr *)&name, sizeof(name))<0){
        perror("connect");
        close(sock);
        return 1;
    }
      //envoie du message
    if(write(sock, msg, sizeof(msg))<0){
        perror("write");
        close(sock);
        return 1;
    }
   
      //reception du message
    read(sock, &buf, 100);
    printf("%s\n", buf);

   
    close(sock);
       
    return 0;

}

Maintenant le serveur :

/*Exemple de socket stream (TCP) de réception */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>


int main (int argc, char *argv[])
{
  int sock, msgsock;
  size_t length;
  socklen_t lemis;
  struct sockaddr_in name;
  struct sockaddr_in emis;
  char buf[1024];
  int rval, i;
  int port;

    //création du message
        printf("entrer un port :\n");
        scanf("%d",&port);

  /* Creation socket AF_INET entre machines */
  sock=socket(AF_INET,SOCK_STREAM,0);
  if (sock<0)
    {
      perror("socket");
      exit(1);
    }

  /* Initialisation de la socket */
  bzero(&name,sizeof(name));
  lemis=sizeof(emis);
  bzero(&emis,lemis);
  name.sin_family =AF_INET;
  /*adresse source indifférente */
  name.sin_addr.s_addr=INADDR_ANY;
  /*port 9999 (arbitriare) */
  name.sin_port =htons(port);
  length=sizeof(name);

//permet de savoir si le socket est en cours d'utilisation
  if (bind (sock,(struct sockaddr *)&name,length)!=0)
    {
      perror("bind");
      close(sock);
      exit(1);
    }

  /* ntohs conversion entiers format réseau to hote */
  printf("Socket serveur TCP port #%d\n",ntohs(name.sin_port));

  /*Début acceptation de connexion sur la socket sock Accepte
    5 connexions maximum en attente*/
  listen(sock,5);

  do
    /* Si demande de connexion ouvre une socket pour celle ci */
    {
      //accept la connection du client
      msgsock=accept(sock,(struct sockaddr *)&emis,&lemis);
      if (msgsock<0)
       perror("accept");
      else do
    /* Récuperation des rédérences de l'émetteur pour l'impressions */
    {
      if(getsockname(msgsock,(struct sockaddr *)&emis,&lemis)<0)
        {
          perror("getsockname");
          close (sock);
          return 1;
      }

      /* ntohs conversion entiers format réseau to hote */
       printf ("Socket TCP emetteur %s port: #%d\n",inet_ntoa(name.sin_addr),ntohs(emis.sin_port));

        //mise a zero du buffer
      bzero(buf,sizeof(buf));
        //reception du message dans buffer
      if ((rval=read(msgsock,buf,1024))<0)
        {
          perror("read");
          i=1;
        }
     
      if(rval==0)
        fprintf(stderr,"Fin connexion\n");
      else
        {     
          fprintf(stdout,"-->%s\n",buf);
            //renvoie la valeur qui est arrivé
          write(msgsock,buf,sizeof(buf));
        }
    }while (rval!=0);

    }while(i);
    close (msgsock);

  return 0;
}

Voilà, en esperant que vous avez des sources ou des conseils ( je sais qu'il faut utiliser des threads mais y a pratiquement pas de docs sur le net ... )
Je debute en C d'où ma demande...

Merci d'avance !

Slobberbone


Cette discussion est classée dans : port, include, socket, name, sock


Répondre à ce message

Sujets en rapport avec ce message

[C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l Socket C et api [ par shadow1779 ] Bonjour,j'ai un petit prob avec un bot que j'essai de faire avec l'api et les sockets en C, pour l'instant on ne peux que cliquer sur le bouton connec probleme de communication entre deux programme [ par smook ] re salut le dernier message que j ai poster c etait pour les socket et la librairie "libwsock.a" mais sayer j ai passer cette etape j ai reussi a fair [socket et api win]recevoir et envoyer en meme temps [ par shadow1779 ] Bonjour je me suis fais un petit programme irc qui me servira de bot pour auto-op des personne ou d'autre taches diverses, le client aura une boite de pb de compilation (prog utilisant un socket) [ par smook ] boujour a tous bon je vais commencer part bien vous detailler ce qui a detailler : j utilise dev c++ 4.9.9.2 et mon ^programme a pour but d ecouter un Client serveur [ par fanch314 ] Je que le serveur et le client échange par internet.Le serveur ne voit pas de client connectéEt le buffer du client contient nimporte quoi.En gros ils Problème de connexion Socket [ par qhhu ] Bonjour !En temp normal, je programme en java, mais j'ai voulu essayer le c++parce que je trouve que c'est interessant de connaître plusieurs language probleme de send en C avec socket [ par thorn74 ] bonjour je suis actuellement en IUT info et G un  projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte a socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver Winsock probleme [ par greg13 ] J'ai une erreur de compilation dans le code suivant :#include #include #include #pragma comment(lib, "wsock32.lib")SOCKET Sock;int main(int argc, char


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales