Chat client/serveur

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

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.