Winsock 2 pour un chat tout simple

1/5 (14 avis)

Vue 15 995 fois - Téléchargée 928 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
the_last_pharaon Messages postés 6 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 29 novembre 2004
9 avril 2005 à 18:46
il est préferable d'utiliser les printf que les cout pour les sockets. cout se comporte vraiment bizarement....
the_last_pharaon Messages postés 6 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 29 novembre 2004
9 avril 2005 à 18:33
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
the_last_pharaon Messages postés 6 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 29 novembre 2004
9 avril 2005 à 18:11
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
Chacke Messages postés 1 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 15 août 2004
15 août 2004 à 02:00
Merci JCPP je vais essayé de créer un usercontrol qui fait la tache Merci...
et bonne programmation @U;
leptidev Messages postés 206 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 décembre 2007
26 déc. 2003 à 22:23
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 ?
Afficher les 14 commentaires

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.