Chat client/serveur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 517 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

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
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_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'
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...
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())...

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.