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