Winsock 2 pour un chat tout simple

Soyez le premier à donner votre avis sur cette source.

Vue 15 656 fois - Téléchargée 906 fois

Description

Le prog. fonctionne bien entre 2 PC.
(Pas essayé avec plusieurs personnes)

Explication pour lancer le programme :
Lancer « IP_serveur », ensuite le client doit avoir dans le programme votre IP et lancer le programme « IP_client »

Source / Exemple :


// client simple

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

char *bufferRecv = new char[800];
char *bufferSend = new char[800];

int rec;
#define IP   "XXX.XXX.XXX.XXX"
#define PORT 1000

main()
{       
printf("          -=[ Client ]=-\n\n");
		WSADATA WSAData;
		WSAStartup(MAKEWORD(2,0), &WSAData);
	
		SOCKET sock;
		SOCKADDR_IN sin;

		sock = socket(AF_INET, SOCK_STREAM, 0);	

		sin.sin_addr.s_addr	= inet_addr(IP);
		sin.sin_family	= AF_INET;
		sin.sin_port	= htons(PORT);

		connect(sock, (SOCKADDR *)&sin, sizeof(sin));
        
        do
        {	
		scanf ("%s",bufferSend);
		send(sock, bufferSend, strlen(bufferSend), 0);  

 if ((rec = recv (sock, bufferRecv, 64*sizeof(char), 0)) != SOCKET_ERROR)
                {
                 bufferRecv[rec] = '\0';
                 printf("\n%s\n",bufferRecv); 
                }
        }
        while (rec > 0);
}

////////////////////////////////////////////////////////////////////////////////

// serveur simple

#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <iostream.h>

char *bufferRecv = new char[800];
char *bufferSend = new char[800];

int rec;
#define PORT 1000

main()
{       
printf("          -=[ Serveur ]=-\n\n");
		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(PORT);

		bind(sock, (SOCKADDR *)&sin, sizeof(sin));
		listen(sock, 0);
		int sinsize = sizeof(csin);

	    sock = accept(sock, (SOCKADDR *)&csin, &sinsize);
       
        do
        {       
         scanf ("%s",bufferSend);
         send(sock, bufferSend, strlen(bufferSend), 0);

if ((rec = recv (sock, bufferRecv, 64*sizeof(char), 0)) != SOCKET_ERROR)
                {
                  bufferRecv[rec] = '\0';
                  printf("\n%s\n",bufferRecv); 
                }
        }
        while (rec > 0);

}

Conclusion :


Je remercie NerOcrO, de m'avoir donné quelle explication pour finir ce prog.
Pour recevoir un message, il faut envoyer un message car il n'y a pas de bouton envoi.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
29 novembre 2004

il est préferable d'utiliser les printf que les cout pour les sockets. cout se comporte vraiment bizarement....
Messages postés
6
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
29 novembre 2004

est ce que quelqu'un pourrrait m'expliquer la différence entre printf et cout outre le fait que l'un provient du c et l'autre du c++.


merci
Messages postés
6
Date d'inscription
mardi 22 juin 2004
Statut
Membre
Dernière intervention
29 novembre 2004

bon code, mais je ne comprend pk tout s'affiche de façon haché.....
également, le client ainsi que le serveur doivent attendre d'écrire et d'envoyer pour que le message reçu precedemment s'affiche

merci de me répondre
Messages postés
1
Date d'inscription
vendredi 6 juin 2003
Statut
Membre
Dernière intervention
15 août 2004

Merci JCPP je vais essayé de créer un usercontrol qui fait la tache Merci...
et bonne programmation @U;
Messages postés
206
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2007

Juste une question :

C koi la différence avec les stream et les raws paquet ?

Ensuite, peut on envoyer d'aures types de données (struct ...) ?

Et doit on mettre plus de données moins vite ou moins de données plus vite pour un même résultat ou cela dépend de la fonction qui extrait les données ?

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.