Chat client/serveur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 448 fois - Téléchargée 34 fois

Contenu du snippet

Ce code permet une discussion entre la personne possédant le serveur et celle possédant le client.

Source / Exemple :


//------------------------------partie serveur

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <string.h>

int main()
{
	char buffer[255];
	
	WSADATA WSAData;
	WSAStartup(MAKEWORD(2,0), &WSAData);

	SOCKET sock;
	SOCKET csock;
	SOCKADDR_IN sin;
	SOCKADDR_IN csin;

	sock = socket(AF_INET, SOCK_STREAM, 0);

	sin.sin_addr.s_addr = INADDR_ANY;
	sin.sin_family	    = AF_INET;
	sin.sin_port	    = htons(4444);

	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
	listen(sock, 0);

		
		int sinsize = sizeof(csin);
		if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
		{
      	 		 memset(buffer,0,255);
		         wsprintf(buffer,"Serveur connecte :-) tu peux parler\n");
		         send(csock,buffer,255,0);
		}
		
		while(1)
	{
	
          {
               memset(buffer, '\0', sizeof(buffer));
               recv(csock, buffer, sizeof(buffer), 0);
		       Beep(400,150);
   			   printf("%s\n",buffer);
          }
          
          {   	
 	           char chaine[1000];
 	           fflush(stdout);
 	           printf("shown dit :");
 	           if (read(0, chaine, 1000)) {
 	           sprintf (buffer, "shown dit :%s\n", chaine);
 	           send (csock, buffer, strlen (buffer), 0);}
          }
		
    	  		
		
	}
}

//------------------------------partie client

#include <stdio.h>    // printf
#include <conio.h>    // getch()
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#include <string.h>

int main()
{
	WSADATA WSAData;
	WSAStartup(MAKEWORD(2,0), &WSAData);

	SOCKET sock;
	SOCKADDR_IN sin;
	char buffer[255];
	char *ptr;
	char msg[256];

	sock = socket(AF_INET, SOCK_STREAM, 0);

/*remplacer l'ip par celle de la machine possédant le serveur*/
	sin.sin_addr.s_addr = inet_addr("127.0.0.1");
/*--------------------------------------------------------------------------*/
 
	sin.sin_family	    = AF_INET;
	sin.sin_port	    = htons(4444);

	connect(sock, (SOCKADDR *)&sin, sizeof(sin));
   	   	
   	
   	while(1)
	{
	
    {
    memset(buffer, '\0', sizeof(buffer));
	recv(sock, buffer, sizeof(buffer), 0);
	Beep(400,150);
   	printf("%s\n",buffer);
    }
   
    
    {   	
 	char chaine[1000];
    fflush(stdout);
    printf("Odji dit :");
    if (read(0, chaine, 1000)) {
    sprintf (buffer, "Odji dit :%s\n", chaine);
	send (sock, buffer, strlen (buffer), 0);}
	}
	
	
	
		    
    }
	
   	
}

Conclusion :


Ce code fonctionne avec Dev-C++ malgré des imperfections en particulier
du coté serveur lors de la reception.
Donc si vous savez comment y remédier faites-le moi savoir ;-)

Ne soyez pas trop méchant je débute en C (à peine 3 petits mois...)

A voir également

Ajouter un commentaire

Commentaires

MetalDwarf
Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006
-
Il manque BEAUCOUPO de choses pour en faire un vrai serveur de chat, mais c est surtout le fait que ton appli ne soit pas multi-clients qui est une enorme limitation.
Il y a plusieures methodes pour le faire, tu devrais essayer de voir ca (les threads par ex puisque tu es sous windows, ou select())...
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
si c'est pas en mode graphique, alros ça vallait pas le coup de mettre un client et un serveur, suffisait de faire un telnet sur le serveur...

Bon, moi je vennait ici pour apprendre comment utiliser select, je passe mon chemin...
cs_binouche22
Messages postés
1
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 janvier 2005
-
pourquoi il arrive pas a faire l'edition de lien??:

undefined reference to `WSAStartup@8'
undefined reference to `socket@12'
undefined reference to `inet_addr@4'
undefined reference to `htons@4'
undefined reference to `connect@12'
undefined reference to `recv@16'
undefined reference to `send@16'
darkkinj
Messages postés
18
Date d'inscription
samedi 6 novembre 2004
Statut
Membre
Dernière intervention
12 mars 2005
-
Comment fait-on pour porter l'application sur une autre machine. J'aurai voulu tester le soft sur une autre machine qui ne dispose pas de compilateur et le soucis doit venir de la. Quelles modifications as-t-on à fazire pour pouvoir donc utiliser un programme qui fonctionne avec des socket mais qui n'a pas de compilateur.
cs_Thomas46
Messages postés
123
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
11 mars 2007
-
Darkkinj ?
Bha tu compiles et c'est tout ça te donne 2 .exe et y'a plus besoin de compilateur O_O

Binouche>Tu utilises Devcpp ?
Tu dois ajouter la lib de devcpp pour les socket dans les options du projet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.