Bonjours à tous
J'ai un probleme avec mon programme client serveur.
Je voudrais que vous m'aidiez à créer un serveur simple et multi-client
Je voudrais faire un programme de Tchat en console multithread est simple en langage C
pouvez vous m'aider svp.
/*********************Client***************/
voici le programme principale main
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "raz.h"
#include "systeme.h"
#include "test_pseudo.h"
#include <winsock2.h> //librairie de socket Windows
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char *argv[])
{
char tab_pseudo[26]; //stockage du pseudo
char bufferrev[50];
char ip[15];
char host[50]; //Nom de la machine
int tempo=0,length_pseudo=26;
unsigned int i=0; //initialialisation des variables
int recevoir=0,port=0;
int length_sin;
WSADATA WSAData; //initialisation d'une variable WSADATA utilise pr le demarrage de WSAStartup()
WSAStartup(MAKEWORD(2,0), &WSAData); //informe l ordinateur qu on vas utiliser les sockets parm 1 =2 pour la version de Winsock Param 2= adresse de WSAData
SOCKET sock; //initialisation d une variable du type SOCKET
SOCKADDR_IN sin; //stokage des informations technique du socket
sin.sin_addr.s_addr = inet_addr(ip);
sin.sin_family= AF_INET; //famille du socket de type internet
sin.sin_port= htons(port); //port sur lequelle on veut se connecter
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //la création du socket param 1 famille du socket param 2 permet ouvrir une communication entre les 2 ordinateurs directe
bind(sock,(SOCKADDR *)&sin,sizeof(sin)); //Permet d attacher directement au port et a l 'adresse defini
systeme();
clear_tableau(tab_pseudo,length_pseudo); //fonction raz.h
length_sin=sizeof(sin);
printf("Veulliez saisir votre prenom : \n");
gets(tab_pseudo);
test_pseudo(tab_pseudo);
printf("Veulliez indiquer le numero de port: ");
scanf("%d",&port);
printf("Veuillez donner l adresse IP du serveur: ");
scanf("%s",&ip);
printf("Test de connection en cours...\n");
gethostname(host,sizeof(host));
printf("Bonjour %s\n",tab_pseudo);
printf("Vous etes connecte au PC %s votre adresse IP est %s\n",host,ip);
memset(bufferrev,0,sizeof(bufferrev));
if(connect(sock,(SOCKADDR*)&sin,sizeof(sin)))
{
printf("La connection a echoue\n");
system("PAUSE");
exit(0);
}
while(tempo>-1)
{ sendto(sock,tab_pseudo,6,0,(SOCKADDR*)&sin,sizeof(sin));
scanf("%s",&bufferrev);
tempo=send(sock,bufferrev,sizeof(bufferrev),0);
memset(bufferrev,0,sizeof(bufferrev));
recvfrom(sock,bufferrev,sizeof(bufferrev),0,(SOCKADDR*)&sin,&length_sin);
printf("%s\n",bufferrev);
memset(bufferrev,0,sizeof(bufferrev));
}
printf("Connection termine\n");
WSACleanup();
getch();
system("PAUSE");
return 0;
}
//ici c raz.h
void clear_tableau(char tab[],int length_tableau)
{
int raz;
for(raz=0;raz<length_tableau;raz++) //nettoyage de la mémoire
{
tab[raz]=0; //raz Remise a zero
}
}
//systeme.h
void systeme(void)
{
system("TITLE programme Tchat Client version 0.9");
system("COLOR fc");
}
//test_pseudo.h
#include <stdio.h>
#include <string.h>
void test_pseudo(char tableau[])
{
int unsigned i;
for(i=0;i<strlen(tableau);i++)
{
while(tableau[i]<0x41||tableau[i]>0x5A&&tableau[i]<0x61||tableau[i]>0x7A)
{
printf("0\n");
printf("Veulliez saisir votre prenom : \n"); //saisi pseudo
gets(tableau);//lire pseudo
for(i=0;i<strlen(tableau);i++)
{
printf("%c",tableau[i]);
if(tableau[i]<0x41||tableau[i]>0x5A&&tableau[i]<0x61||tableau[i]>0x7A)
{
printf("\nErreur vous avez saisi %c",tableau[i]);
}
else
{
break;
}
}
}
}
}
RATP