begin process at 2012 02 13 05:52:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > CHAT CLIENT/SERVEUR EN API UTILISANT WINSOCK

CHAT CLIENT/SERVEUR EN API UTILISANT WINSOCK


 Information sur la source

Note :
8 / 10 - par 6 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Débutant Date de création :03/02/2005 Date de mise à jour :03/02/2005 22:54:39 Vu / téléchargé :7 159 / 1 136

Auteur : thedestiny

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Voila, débutant avec Winsock, je m'etais posé comme défis de réaliser un petit chat ou plusieurs clients pouvez se connecter à un même serveur et dialoguer entre eux. Il reste cependant quelques bugs ( mineurs ? ) qui reste à corriger, ce que je tenterai de faire par la suite ( pas bcp de temps pour le moment ).

Voila, j'attends vos ritiques ce qui permettra ( peut-être ) de pouvoir progresser :)

Source

  • /*********************************************/
  • /* Serveur */
  • /*********************************************/
  • #include <stdio.h>
  • #include <conio.h>
  • #include <winsock.h>
  • #pragma comment(lib,"WSOCK32.LIB")
  • #include "main.h"
  • char buf[1024];
  • int main()
  • {
  • int Res;
  • wVersionRequested=MAKEWORD(1,1);
  • Res = WSAStartup(wVersionRequested,&wsaData);
  • if(Res!=0)
  • {
  • return DisplayErreur("WSA ne veut pas s'initialiser.", 1);
  • }
  • Sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  • ZeroMemory(&Addr,sizeof(Addr));
  • Addr.sin_family = AF_INET;
  • Addr.sin_addr.S_un.S_addr = INADDR_ANY;
  • Addr.sin_port = htons(1014);
  • Res = bind(Sock, (struct sockaddr*)&Addr, sizeof(Addr));
  • if(Res!=0)
  • {
  • return DisplayErreur("Les sockets deconnent.", 1);
  • }
  • Res = listen(Sock, 16);
  • if(Res!=0)
  • {
  • return DisplayErreur("Impossible de proceder a l'ecoute.", 1);
  • }
  • printf("Le serveur est lance.\nAttente de connexion de la part des clients.\n");
  • New_Sock = new SOCKET;
  • while(bContinue)
  • {
  • Cnx++;
  • New_Sock[Cnx] = accept(Sock, (struct sockaddr*) NULL, (int *) NULL);
  • printf("Client connecte. ( %d total )\n", Cnx);
  • hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Echo, (LPVOID)New_Sock[Cnx], 0, &dwThread);
  • }
  • CloseHandle(hThread);
  • return 0;
  • }
/*********************************************/
/*                                  Serveur                                        */
/*********************************************/

#include <stdio.h>
#include <conio.h>
#include <winsock.h>
#pragma comment(lib,"WSOCK32.LIB")

#include "main.h"

char buf[1024];

int main()
{
	int Res;

	wVersionRequested=MAKEWORD(1,1);
	Res = WSAStartup(wVersionRequested,&wsaData);

	if(Res!=0)
	{
		return DisplayErreur("WSA ne veut pas s'initialiser.", 1);
	}

	Sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

	ZeroMemory(&Addr,sizeof(Addr));
	Addr.sin_family = AF_INET;
	Addr.sin_addr.S_un.S_addr = INADDR_ANY;
	Addr.sin_port = htons(1014);

	Res = bind(Sock, (struct sockaddr*)&Addr, sizeof(Addr));

	if(Res!=0)
	{
		return DisplayErreur("Les sockets deconnent.", 1);
	}

	Res = listen(Sock, 16);

	if(Res!=0)
	{
		return DisplayErreur("Impossible de proceder a l'ecoute.", 1);
	}

	printf("Le serveur est lance.\nAttente de connexion de la part des clients.\n");

	New_Sock = new SOCKET;

	while(bContinue)
	{
		Cnx++;
		New_Sock[Cnx] = accept(Sock, (struct sockaddr*) NULL, (int *) NULL);				
		printf("Client connecte. ( %d total )\n", Cnx);

		hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Echo, (LPVOID)New_Sock[Cnx], 0, &dwThread);
	}

	CloseHandle(hThread);

	return 0;
}

 Conclusion

Voila, je tiens à remercier tous ceux qui déposent les sources car ca m'a permis de pas mal comprendre de choses depuis que je code :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 février 2005 22:54:39 :
Corrections d'anneries...

 Sources du même auteur

Source avec Zip Source avec une capture CLASSES POUR LA CRÉATION D'UN GUI DANS UNE APPLI GRAPHIQUE
Source avec Zip Source avec une capture MORPION EN RESEAU PAR TCP/IP EN API ET AVEC SDL [VC++]
Source avec Zip Source avec une capture SYSTEME DE DIAPOSITIVE (SANS MFC) [VC++]

 Sources de la même categorie

Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar

Commentaires et avis

Commentaire de BruNews le 03/02/2005 22:37:14 administrateur CS

Que fait de l'implementation dans des fichiers h ???
TerminateThread() ne devrait jamais etre employe, c'est une instruction d'urgence pour le debug et situations de ce genre. Un thread doit sortir proprement en liberant ses ressources. A ce propos, je n'ai pas vu les CloseHandle() correspondants a chaque CreateThread().
On verra le reste quand la synchro des threads sera realisee.

Commentaire de thedestiny le 03/02/2005 22:58:02

Merci pour la remarque ^^
Les fichiers *h à la base ne devaient contenir que les prototypes de fonction et je vois pas comment je suis arrivé à y mettre les fonctions dedans...
J'ai remplacé le TerminateThread par le CloseHandle(), qui pendant mes tests avait des défaillances, enfin maintenant ca à l'air d'etre bon
Pour la synchro des threads, c'est simple je sais pas faire :P ( c'est pas pour rien que j'ai dis que j'etais débutant :p )

Commentaire de DeAtHCrAsH le 04/02/2005 21:20:51

Juste une petite remarque en ce qui concerne ton titre.
"...API utilisant Winsock" n'est pas approprié.
Ici tu n'utilises que des fonctions standards du C.
Ce n'est pas de l'API (Application Programming Interace).

Sinon, pour éviter les threads tu peux aussi bien utiliser des sockets asynchrones.

Shell

Commentaire de Arcagi le 21/03/2005 19:40:46

Salut,

Je trouve le code intéressant, et assé simple à comprendre. De mon côté j'ai testé et cela marche très bien :-)

Sinon, je n'est pas bien compris le terme d'API, pour moi cela ressemble bien à une API ! J'ai la bible du programmeur en C/C++ et le style de programmation ressemble étrangement à celui-ci...et dans cette bible ils appellent cela une API. ;-)

Commentaire de mythic_kruger le 04/07/2005 16:54:57

Au vu des 4 premières lignes de code il s'agit bien de l' API Winsock. Cette couche représentée par la librairie dynamique peut être utilisée depuis C ou VB avec quasiment la même syntaxe d'ou l' appellation d' Interface de Programmation d' Application (API).

Commentaire de deck_bsd le 20/09/2007 20:01:44

Yop,


intéressant comme code, cependant, Msg_Recu est une variable ou tout les threads écrivent dedans. Cela pourrait engandrer plusieur problème . Imagine que un thread écrive le message reçu et que avnt que celui-ci l'ai renvoyé , un autre écrit sont message reçu, ben le 1er thread n'envoie pas le message que lui à reçu :s . Tu devrait synchroniser tes threads :D

++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales