begin process at 2010 03 15 20:26:09
  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é :6 072 / 1 077

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 ÊTRE AVERTIS LORS D'UN NOUVEL ARTICLE SUR UN BLOG DE TYPE SK... par jojo930
Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta

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

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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,874 sec (3)

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