Probleme avec des sockets

Messages postés
23
Date d'inscription
vendredi 20 février 2004
Statut
Membre
Dernière intervention
1 octobre 2007
- - Dernière réponse : turnerom
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
- 9 mai 2006 à 14:25
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
Afficher la suite 

1 réponse

Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
0
Merci
Jette un oeil a une de mes sources, ca t'aidera surement (enfin je l'espere)
http://www.cppfrance.com/codes/ECHANGE-FICHIER-AVEC-SERVEUR-MULTICLIENT_30629.aspx

TuRn3r
Commenter la réponse de turnerom