begin process at 2010 03 21 09:37:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > MINI CHAT SOCKET

MINI CHAT SOCKET


 Information sur la source

Note :
8 / 10 - par 3 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Classé sous :client, serveur, socket, internet, chat Niveau :Débutant Date de création :11/09/2006 Date de mise à jour :04/03/2009 16:13:10 Vu / téléchargé :19 985 / 23 783

Auteur : rtfm321

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

C'est tout simplement un mini chat, qui permet d�échangé des messages entre le client et le serveur. J�ai fait simple pour que les débutants en sockets comprennent.

Source

  • #include <stdio.h>
  • /********************************************
  • *******************************************
  • *******************************************
  • *******************************************
  • *******************************************
  • *******************************************
  • *******************************************
  • *******************************************
  • *******************************************/
#include <stdio.h>
/********************************************
*******************************************
*******************************************
*******************************************
*******************************************
*******************************************
*******************************************
*******************************************
*******************************************/

 Conclusion

Ce mini chat est trés simple. Vous pouvez l'améliorer on lisant des cours plus pointu :-p

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   client-serveur
    • client.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier202 octets
    • client.c~Télécharger ce fichier [Réservé aux membres club]2 742 octets
    • serveur.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier185 octets
    • serveur.c~Télécharger ce fichier [Réservé aux membres club]3 910 octets

Télécharger le zip


 Historique

04 mars 2009 16:13:10 :
...

 Sources du même auteur

Source avec Zip SOCKET CLIENT SERVEUR

 Sources de la même categorie

Source avec Zip ÊTRE AVERTIS LORS D'UN NOUVEL ARTICLE SUR UN BLOG DE TYPE SK... par jojo930
Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CLIENT/SERVEUR UTILISANT LES IOCP RÉALISÉ AVEC BORLAND BUILD... par goodboy21
Source avec Zip SERVEUR/CLIENT LINUX par ghost4
Source avec Zip Source avec une capture CHAT UTILISANT 2 SERVEURS par randriano
Source avec Zip Source avec une capture [CLIENT TCP/IP AVEC L'API WIN 32] REQUETEUR V2.0 par gf18
Source avec Zip MINI CHAT C/C++ par edf102

Commentaires et avis

Commentaire de rtfm321 le 11/09/2006 14:53:27

merci pour vos commentaires j'attend .

Commentaire de thedestiny le 11/09/2006 16:31:24

Certes c'est très simple, mais à mon avis, il aurait été peut-être 'un peu plus' interréssant de créer des threads afin de rendre l'émission et la réception de messages moins casse-pieds ;)

Commentaire de baby3378 le 11/09/2006 19:12:15

je pense aussi a une passerelle, plus pratique, pas besoin de controler l'ip ... .
Sinon c'est un bon exemple pour la prog sur les sockets ;-)

Commentaire de rtfm321 le 12/09/2006 16:20:43

Salut BABY3378, j'aimer bien savoire comment faire sans avoire besoin de l'ip .
Merci

Commentaire de shawtyunit le 28/09/2006 17:46:42

est-il possible de linker avec dev-cpp et si oui comment ?

Commentaire de baby3378 le 29/09/2006 10:59:57

slt, dsl je n'ai pu venir plus tôt sur le site.
Pour ta question, je suis entrain d'écrir la solution.

Voici mon résonement:
Il suffit de faire (sur un site) une page en php qui enregistre l'adresse ip de quiconque se connecte dessus dans un fichier txt.

Ensuite je fait faire une requette http par mon prog server sur cette page (ainsi mon adresse ip est enregistrée).

du coté du programme client je fait faire une requette http sur le ficheir texte contenant a present l'adresse, puis je le fait connecter sur celle ci.

Et voila, pas besoin de rentrer l'ip.
->long a expliquer mais normalement rapide a appliquer.

Qu'en penser vous ?

Commentaire de baby3378 le 01/10/2006 17:38:41

avec dev c'est dans les options du projet, puis parametre, puis tu ajoute libwinsock (il doit se trouver dans le dossier 'lib') dans le dossier du compilo.

Commentaire de rtfm321 le 02/10/2006 19:18:40

Resalut.
baby3378 ta pas un code source qui explique comment faire, j'ai chercher sur le site et j'ai pas trouvé.
Merci.

@shawtyunit : oui c posible de linké avec dev-cpp chérche la lib libwinsock .

Commentaire de baby3378 le 03/10/2006 19:54:57

c'est tellement simple que je doute qu'il y est besoin d'une source, avec ton programme de chat (client) tu trouve l'adresse ip du site sur lequel tu veux aller, puis le port est 80 (http). Aprés la connection tu envoi un message (requette http du genre :

GET http://sertuk9.100webspace.net/testip.php HTTP/1.0\n\n


puis tu fait ton recepteur : recv(sock, buffer, sizeof(buffer), 0);

tu recupérera dans ton buffer le code source du site sur lequel tu vient de te connecter, comme si c'était ton internet explorer qui le faisait.


voci un exemple de source :
#include<fstream.h>
#include <iostream.h>
#include<winsock.h>
#pragma comment(lib, "ws2_32.lib")
  
int main()
    {
         WSADATA WSAData;
         WSAStartup(MAKEWORD(2,0), &WSAData);
    
         SOCKET sock;
         SOCKADDR_IN sin;
  
     char buffer[100000];
     memset(buffer,0,sizeof(buffer));//nétoyage ;-)


     char canal[] = "GET http://sertuk9.100webspace.net/testip.php HTTP/1.0\n\n";
/*requette de la page*/
         ofstream log;
         log.open("fichier.txt"); // fichier pour enregistrer les données reçues.
  
  
         sock = socket(AF_INET, SOCK_STREAM, 0);    
    
         sin.sin_addr.s_addr = inet_addr("64.72.112.133"); //adresse ip du site
         sin.sin_family = AF_INET;
         sin.sin_port = htons(80); // port HTTP.

         connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // on se connecte sur le site web.
        
         send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
     int i = recv(sock, buffer, sizeof(buffer), 0); // le buffer récupère les données reçues.
    

  
         if (i != 0) // si le buffer reçoit des données.
         {
         log << buffer <<  "\n";
          cout <<"contenut de reception : \n";
         cout << buffer <<"|\n";
         system("pause");
        
        
               log.close();
         // enregistrement des données dans le fichier.
         }
        
         if (i == 0)
         {
         log << "aucune donné n'est parvenue\ndsl\a";
        cout <<"\n\apas de réponce\n";
system("pause");
log.close();
}

          closesocket(sock); // on ferme le socket.
         WSACleanup();
         return 0;
     }




PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes.

Tenez moi au courant de vos remarques et/ou suggestions ;-)

Commentaire de rtfm321 le 09/05/2007 17:04:37

ça crain un peut ton code source... baby3378

Commentaire de baby3378 le 10/05/2007 08:47:28

Si tu dis que sa craint je pense qu'il serait pertinent de dire pourquoi, ça ne sert a rien de critiquer sans préciser ce qui nous déplait.

De plus une source peut toujours être améliorée.

Commentaire de rtfm321 le 10/05/2007 17:16:19

C'est surtout ça :
"PS: petite remarque, il se peut que le server te renvoi le code source de la page en plusieur messages, donc pense a mettre 2 recv avec des variables différentes."

Quand on fait un code il faut prévoir ce genr de comportement ;)
Par exemple on peut faire une fonction exprés pour recevoir tout les trams, que tu apele "tout les messages", comme ceci par exemple:

/* l'envoi ou la reception de donnée ce fait en petit bloques qui s'appel trams,
    Par exemple, si la trame maximale fait 1024 octets, et qu'on veut envoyer une
    donnée de 2000 octet, alors sera couper en 2blocs (trams) ...  */

/******************************************************************************
*
* Permet de recevoir proprement un Bloc de données
* Retourne la taille de data reçu
*
******************************************************************************/
int recoi_data ( SOCKET socket, char *data )
{
   size_t len_data;
   size_t data_receved = 0;

   char len_data_buffer[10];

   /* recevoir la taille de data */
   int n = recv (socket, len_data_buffer, sizeof len_data_buffer - 1, 0);
   if (n == SOCKET_ERROR)
      return SOCKET_ERROR;

   len_data_buffer[n] = '\0';
   len_data = atoi(len_data_buffer);

   while (data_receved != len_data)
   {
      int n = recv (socket, data + data_receved, sizeof data - 1, 0);

      if (n >= 0)
         data_receved += n;

      else  return SOCKET_ERROR;
   }

   return ((int)data_receved);
}



Et la fonction d'envoi correspandante:

/******************************************************************************
*
* Permet d'envoyer proprement un Bloc de données.
* Retourne la taille de donnée envoyer
*
******************************************************************************/
int envoi_data ( SOCKET socket, char *data )
{
   size_t const len_data = strlen (data);
   size_t data_sent = 0;

   char len_data_buffer[10];
   sprintf(len_data_buffer, "%d", len_data);

   /* envoi de la taille de data, comme etant une chaine */
   int n = send (socket, len_data_buffer, strlen(len_data_buffer), 0);
   if (n == SOCKET_ERROR)
      return SOCKET_ERROR;

   /* envoi du reste, (s'il y a du reste) */
   while (data_sent != len_data)
   {
      n = send (socket, data + data_sent, len_data - data_sent, 0);

      if (n >= 0)
         data_sent += n;

      else  return SOCKET_ERROR;
   }

   return ((int)data_sent);
}



J'ai mis un autre code source simple qui utilise ces fonction ici:
http://www.cppfrance.com/codes/SOCKET-CLIENT-SERVEUR_42385.aspx

;)


Commentaire de Monyisageek le 19/03/2008 18:20:32

http://www.cppfrance.com/codes/SOCKET-CLIENT-SERVEUR_42385.aspx

Commentaire de Monyisageek le 19/03/2008 18:21:14

Hum... j'ai pas fait exprès désolé ....

Commentaire de wam777 le 08/05/2009 13:22:05

Salut
Je crois que ton code source est vide ... pourrais tu le mettre à jour s'il te plaït ?

Commentaire de overcrash3181 le 09/02/2010 23:43:30

Non non le code y est faut Dl le Zip en revanche ce n'est pas du C ?

car ca en C c'est pas possible il me semble :
                    printf("::::: Client connected\n\n");
                    int go = 1;
les déclarations de variable se font en début de fichier non?


Si ce n'est pas du C alors pourquoi les fichier sont nommés Client.c

Ce n'est pas une critique j'aimerais juste comprendre donc a ne pas prendre mal ^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Tutorial - Socket, serveur, client BCPP + GUI [ par NyxArm ] Bonjours tout le monde, je suis présentement en période d'appretissage du language CPP sur Borland(v.6). Maintenant que j'ai acquis quelque conna Evènement sur un socket client [ par darsh99 ] J'aimerais savoir si la méthode utilisée par BlackGoddess pour son serveur (http://www.cppfrance.com/article.aspx?ID=1287) est récupérable pour gérer Thread et socket besoin de conseil [ par kawito ] Salut,je desire realiser un client/serveur TCPle probleme est que les fonctions accept et recv sont bloquante.donc cela bloque l'affichage etc...mon p Programmer un chat avec un serveur en java et un client en c++ [ par Snake655 ] J'aimerais savoir si déjà c'est possible (je pense que oui quand meme :-D) et si oui, que vous m'eclaireriez sur la méthode. Mon but serait de creer u programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska problème socket sous windows [ par kod32 ] Voici mon code : (winsock2.h)-----------------------------int main(){ /* inialisation */ WSADATA wsa; WSAStartup(MAKEWORD(2,0), &wsa); /* Qd un Socket reçoit une trame erronée ... [ par valoue ] Bonjour,Je suis en train de développer una appli client serveur sous VC++, j'utilise des SOCKET.Le client et le serveur communiquent en s'envoyant des client & server [ par Stormy ] J'ai codé un serveur simple usant de TCP. Comme client j'utilise NetCat. Or, quand NetCat 'ferme', mon serveur ne détecte pas la clôture de la relatio Client/Serveur, encore..... [ par glubust ] Je veux faire fonctionner une application client/serveur sous UNIX (client) et WINDOWS (serveur).Le programme client envoi une simple requête au serve connection client serveur avec MFC [ par Spiffou ] Bonjour à tous,j'avance petit à petit dans la programmation socket, mais je suis confronté à une nouvelle difficulté et j'ai une ou deux question sans


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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,624 sec (3)

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