begin process at 2012 05 27 14:20:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > UN T'CHAT EN C/C++

UN T'CHAT EN C/C++


 Information sur la source

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Niveau :Expert Date de création :05/10/2003 Vu / téléchargé :9 499 / 1 024

Auteur : Arkain

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Voila, un petit t'chat en C/C++. Il a été compilé sur VC++6.

Il utilise les sockets et la librairie ws2_32.lib

Il reste encore beaucoup de choses à faire. Mon prochain but va être d'accepter les pseudo (genre, on entre un pseudo au début de la convers et go....). Et ensuite, je vais essayer de faire un truc dans ce genre:

[CLIENT1]>>>>>>>>>>>>>[SERVEUR]<<<<<<<<<<< <<[CLIENT2]


voila....

P.S: J'ai essayé de traduire les sources pour qu'elles soit compatible avec dev Cpp...Mais...je sais pas.

Source

  • Serveur:
  • #include<stdio.h>
  • #include<winsock2.h>
  • #include<iostream.h>
  • // la vous devez le transformer en lien vers la lib.
  • //#pragma comment(lib,"ws2_32.lib")
  • #define N 1000
  • void main()
  • {
  • WSADATA wsa;
  • WSAStartup(MAKEWORD(2,0),&wsa);
  • SOCKET server;
  • SOCKET sock;
  • SOCKADDR_IN sinserv;
  • SOCKADDR_IN sin;
  • int port;
  • printf("Port : ");
  • scanf("%i",&port);
  • sinserv.sin_family=AF_INET;
  • sinserv.sin_addr.s_addr=INADDR_ANY;
  • sinserv.sin_port=htons(port);
  • server=socket(AF_INET,SOCK_STREAM,0);
  • bind(server,(SOCKADDR*)&sinserv,sizeof(sinserv));
  • listen(server,0);
  • char buffer[N];
  • int sinsize;
  • int err=0;
  • while(1)
  • {
  • sinsize=sizeof(sin);
  • if((sock=accept(server,(SOCKADDR*)&sin,&sinsize))!=INVALID_SOCKET)
  • {
  • while(err>-1)
  • {
  • memset(buffer,0,sizeof(buffer));
  • cin.getline(buffer, N);
  • err=send(sock,buffer,sizeof(buffer),0);
  • memset(buffer,0,sizeof(buffer));
  • recv(sock,buffer,sizeof(buffer),0);
  • printf("%s\n",buffer);
  • }
  • }
  • }
  • }
  • ----------------------------------------------------------------------------------------------
  • Client:
  • #include<stdio.h>
  • #include<winsock2.h>
  • #include <iostream.h>
  • // la vous devez le transformer en lien vers la lib.
  • //#pragma comment(lib,"ws2_32.lib")
  • #define N 1000
  • void main()
  • {
  • printf("\t\t\t\tBienvenue sur \"T\'Chat\".\n\n");
  • WSADATA wsa;
  • WSAStartup(MAKEWORD(2,0),&wsa);
  • SOCKET sock;
  • SOCKADDR_IN sin;
  • printf("Ip : ");
  • char ip[15];
  • scanf("%s",ip);
  • printf("%s","\nPort : ");
  • int port;
  • scanf("%i",&port);
  • sin.sin_family=AF_INET;
  • sin.sin_addr.s_addr=inet_addr(ip);
  • sin.sin_port=htons(port);
  • sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  • bind(sock,(SOCKADDR*)&sin,sizeof(sin));
  • if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
  • {
  • printf("La connection a echoue\n");
  • system("PAUSE");
  • exit(0);
  • }
  • char buffer[N];
  • memset(buffer,0,sizeof(buffer));
  • int err=0;
  • while(err>-1)
  • {
  • cin.getline(buffer, N);
  • err=send(sock,buffer,sizeof(buffer),0);
  • memset(buffer,0,sizeof(buffer));
  • err=recv(sock,buffer,sizeof(buffer),0);
  • printf("%s\n",buffer);
  • memset(buffer,0,sizeof(buffer));
  • }
  • printf("Connection terminée\n\n");
  • WSACleanup();
  • system("PAUSE");
  • }
Serveur:

#include<stdio.h>	
#include<winsock2.h>
#include<iostream.h>

// la vous devez le transformer en lien vers la lib.
//#pragma comment(lib,"ws2_32.lib")

#define N 1000

void main()
{
	WSADATA wsa;
	WSAStartup(MAKEWORD(2,0),&wsa);

	SOCKET server;
	SOCKET sock;

	SOCKADDR_IN sinserv;	
	SOCKADDR_IN sin;		

	int port;

	printf("Port : ");
	scanf("%i",&port);

	sinserv.sin_family=AF_INET;	
	sinserv.sin_addr.s_addr=INADDR_ANY;
	sinserv.sin_port=htons(port);

	server=socket(AF_INET,SOCK_STREAM,0);
	
	bind(server,(SOCKADDR*)&sinserv,sizeof(sinserv));
	
	listen(server,0);

	char buffer[N];
	int sinsize;
	int err=0;

	while(1)
	{
		sinsize=sizeof(sin);
		if((sock=accept(server,(SOCKADDR*)&sin,&sinsize))!=INVALID_SOCKET)
		{
			while(err>-1)
			{
				memset(buffer,0,sizeof(buffer));
				cin.getline(buffer, N);
				err=send(sock,buffer,sizeof(buffer),0);

				memset(buffer,0,sizeof(buffer));
				recv(sock,buffer,sizeof(buffer),0);
				printf("%s\n",buffer);
			}
		}
	}

}


----------------------------------------------------------------------------------------------


Client:

#include<stdio.h>	
#include<winsock2.h>
#include <iostream.h>

// la vous devez le transformer en lien vers la lib.
//#pragma comment(lib,"ws2_32.lib")

#define N 1000

void main()
{
	printf("\t\t\t\tBienvenue sur \"T\'Chat\".\n\n");

	WSADATA wsa; 
	WSAStartup(MAKEWORD(2,0),&wsa);	

	SOCKET sock;	
	SOCKADDR_IN sin;

	printf("Ip : ");

	char ip[15];	
	scanf("%s",ip);	

	printf("%s","\nPort : ");

	int port;	
	scanf("%i",&port);

	sin.sin_family=AF_INET;

	sin.sin_addr.s_addr=inet_addr(ip);
	
	sin.sin_port=htons(port);
	
	sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

	bind(sock,(SOCKADDR*)&sin,sizeof(sin));

	if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
	{
		printf("La connection a echoue\n");

		system("PAUSE");
		exit(0);
	}

	char buffer[N];
	memset(buffer,0,sizeof(buffer));

	int err=0;

	while(err>-1)
	{
		cin.getline(buffer, N);
		err=send(sock,buffer,sizeof(buffer),0);
		memset(buffer,0,sizeof(buffer));

		err=recv(sock,buffer,sizeof(buffer),0);
		printf("%s\n",buffer);
		memset(buffer,0,sizeof(buffer));
	}

	printf("Connection terminée\n\n");

	WSACleanup();

	system("PAUSE");
}

 Conclusion

Pour le niveau, je sais pas trop quoi mettre...donc...allez, mon premier code en expert. Mais, je vais le changer si vous me dite que ça irai plutot en intermediaire...

 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


 Sources du même auteur

Source avec Zip ARCHITECTURE COMMENTÉ DU PROJET NETAIM (NET ARTIFICIAL INTEL...
Source avec Zip DLL SCIENTIFIQUE, COMPILÉE AVEC VISUAL C++ 6
Source avec Zip WIN32 COMBINÉ AVEC GLUT...
Source avec Zip NOUVELLE VERSION DE "JEU DE LUMIÈRE" EN OPENGL
Source avec Zip JEU DE LUMIÈRE AVEC GLUT

 Sources de la même categorie

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip Source avec une capture CLIENT DE TEST MODBUS TCP par brunovan
Source avec Zip Source avec une capture SCANIP [ARP / ICMP] par ganjarasta
Source avec Zip Source avec une capture TRACEROUTE [WINPCAP] par ganjarasta
Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas

Commentaires et avis

Commentaire de aardman le 05/10/2003 22:41:08

C'est pas vraiment un chat car il faut attendre que l'autre t'ai envoyé une phrase pour pouvoir en envoyer une a ton tour. Il faudrait mettre un thread pour la récéption des messages et cela deviendrai plus pratique.

Commentaire de Arkain le 06/10/2003 02:13:08

Ouai, je suis en phase de le corriger, mais bon....Je débute avec les sockets :). Sinon, je bosse dessus, t'inquiète....

Commentaire de aardman le 06/10/2003 10:32:44

La partie socket fonctionne bien, le reste c'est de la mise en forme.
Bosse bien.

Commentaire de kuroro le 06/10/2003 13:03:33

Si quelqu'un peut me donner un bon site pour apprendre a maîtriser les socket sa m'interesse .

Commentaire de Siriusgalaxie26 le 06/10/2003 14:25:54

Kuroro, télécharge la compil'. Elle est pleine de super choses...

Commentaire de zinotron le 06/10/2003 18:11:52

bon
c pas mal du tout
cependant faire du multi threading pour mieux gerer la connect est a mon avis une movaise idée, tu ferais mieux d'utiliser la fonction select (http://abyssal.homelinux.org/abyssal/@@_Coding/c/sel_serv.txt) et mate dans http://abyssal.homelinux.org/abyssal/@@_Coding/c/ t apas mal de truc ...
vala
++

Commentaire de Arkain le 06/10/2003 20:39:01

ok, je vais voir....

Commentaire de aardman le 06/10/2003 21:15:49

Yep, ma remarque au sujet des threads n'etait valable que pour les sockets simples. Il est vrai que le modele select(...) evite de faire un 2eme thread, mais le prog perdra en simplicité a mon avis.

Commentaire de zinotron le 06/10/2003 21:46:19

en simplicite ptet, mais en facilité de maniement (et de rajout de client et tout et tout) sans doute pas ...
SELECT POWAAAAAAAAAAaaaa :p

Commentaire de JCpp le 09/10/2003 23:23:26

Tien, ça ressemble a une de mes sources.
Un peux normal, il y a pas 1000 façon de faire ceci, bref tout de même.

Il n'y a pas d'intérêt de diffuser cette source, il y en déjà pas mal NON !!!!.

Commentaire de Arkain le 10/10/2003 02:40:35

??boarf...

Commentaire de alain34270 le 12/10/2003 16:50:10

Bonjour,

Merci pour ce source.
Je suis sous windows XP pro, j'ai compilé les sources en vc++ 6, et je n'arrive pas à le faire marcher : il semble que le client se bloque sur le recv. J'avais un autre client-serveur à peu près similaire, et j'ai le même problème.

Quelqu'un pourrait-il venir à mon aide ??
merci d'avance...
alain

Commentaire de alain34270 le 12/10/2003 17:36:02

Quelques précisions sur mon pb :

le client bloque sur le recv, et le serveur bloque sur le getline...

Je fais les tests en localhost (127.0.0.1).

voilà tout ce que je peux dire pour l'instant, sinon que j'ai le même pb avec un client/serveur qui marchait sous 98, et qui ne marche plus sous xp...

Commentaire de alain34270 le 13/10/2003 05:05:12

Ca y est, ça marche ! (mais je ne comprends pas trop pourquoi...)

Merci à tous ceux qui se sont creusés les méninges pour m'aider (en particulier sur le t'chat !)

Commentaire de soumpro le 19/02/2004 18:56:03

C'est vrai qu'il ya souvent des problemes avec les librairies sous Dev-c++ !
Mais pour les sockets , va dans les options d'environnement et change l'adresse de tes bin , tes includes et tes libs !
Utilise le repertoire sous lequel tu as installé les bins,libs et includes de VCC comme repertoires par defaut !
Sinon a part ça , il est bien ton chat !

Commentaire de soumpro le 23/02/2004 10:52:25

Procédure de demarrage !
---------------
Serveur :
port #6000
Client :
IP :120.0.0.1
port : #6000


HUM-HUM-HUM !
#include &lt;iostream&gt;
#include&lt;conio.h&gt;
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
using namespace std;

void DrawMenu();
void DrawMenu()
{
cout &lt;&lt; "\t\t\t\t\t\t\t\t\tBienvenue sur \"T\'Chat\".\n\n\n\n\n\n";
cout &lt;&lt; "\t\t *                                _____________* \n";
cout &lt;&lt; "\t\t *  Heliosnet.frchat              I Nix200     | * \n";
cout &lt;&lt; "\t\t *                                |Morgandetoi|  * \n";
cout &lt;&lt; "\t\t *  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;     |Blu&gt;&gt;shED   | * \n";
cout &lt;&lt; "\t\t *  HeliosChatnetprogrammeur      |ApXa        | * \n";
cout &lt;&lt; "\t\t *  &gt;&gt;&gt;Channel connection------   |UnixLaNd    | * \n";
cout &lt;&lt; "\t\t *  &lt;&lt;&lt;&lt;&lt;&lt;&lt;Chat helios salon -----|Kirua       | * \n";
    cout &lt;&lt; "\t\t *  &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;   ^____________Â? *\n";
cout &lt;&lt; "\t\t *   #Programmeur                                *\n";
cout &lt;&lt; "\t\t *                                 *\n";
cout &lt;&lt; "\t\t *                                               *\n";
cout &lt;&lt; "\t\t *  ________|                                     *\n";
cout &lt;&lt; "\t\t *  |Infos  |                                    *\n";
cout &lt;&lt; "\t\t *  |-------Â?                                    *\n";
cout &lt;&lt; "\t\t *   ______________    ___________               *\n";
cout &lt;&lt; "\t\t *   | Programmeur |  |   Salons  |                *\n";
cout &lt;&lt; "\t\t     |_____________|  | __________|             *\n";
cout &lt;&lt; "\t\t *                                               *\n";
cout &lt;&lt; "\t\t *************************************************\n";

}

Commentaire de zinotron le 24/02/2004 02:32:49

c'est quoi ca sumpro ?

Commentaire de yoyo269 le 06/02/2005 11:35:43

Expert c'est un tout petit peu exagéré là quand même.
Débutant suffira je pense.

YOYO, @+.

Commentaire de Pyroclem le 05/07/2008 16:37:44

//Pour dev cpp:

/* penser a inclure dans les option du projet (editeur de lien)
projet ==> option du projet ==> parametre editeur de lien "../../../Dev-Cpp/lib/libwsock32.a"*/

include <iostream>   //pas de .h
using namespace std;  // sinon cin n'est pas reconnu

int main()           // main doit etre de type int
{
// ton code
return 0;
}

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,811 sec (4)

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