demande d'aide client serveur multi thread
Bonjour à tous ! Tout d'abord je me présente je suis étudiant en BTS iris et pour ma deuxième année, je dois développé un projet... Il s'agit d'un diagnostic pour automobile. Pour cela je dois développé un client serveur en multi thread. Ayant des difficulté en langage C/ C++, je demande un peu d'aide afin de réussir a le rendre fonctionnel. J'ai déjà commencé le programme que je vous collerai par la suite...
Si quelqu'un peut m'aider plus méthodiquement c'est avec plaisir que je lui donnerai mon adresse msn.
Merci a vous.
SERVEUR :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
#pragma comment(lib,"WSOCK32.LIB")
#include <stdio.h>
#include <conio.h>
#include <winsock.h>
#include <errno.h>
/*************************************************
serveur en mode console
*************************************************/
#define PORT 5005
#define Nb_Max_de_Client 10
void Fonction_Thread_Serveur(LPVOID param)
{
char Message_Emis[255];
SOCKET Desc_Socket_Locale;
int fin=FALSE;
Desc_Socket_Locale=(SOCKET)param;
while(!fin)
{
printf("message : ");
gets(Message_Emis);
send(Desc_Socket_Locale,Message_Emis,sizeof(Message_Emis),0);
}
closesocket(Desc_Socket_Locale);
}
int main(void)
{
int Code_Retour;
SOCKET Desc_Socket_Connection;
SOCKADDR_IN Adresse_Socket_Connection;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(1,1);
Code_Retour=WSAStartup(wVersionRequested,&wsaData);
if(Code_Retour!=0)
{
perror("WSAStartup\t");
getch();
WSACleanup();
exit(errno);
}
printf("la version supportee est : %d.%d\n",
LOBYTE(wsaData.wHighVersion),
HIBYTE(wsaData.wHighVersion)
);
Desc_Socket_Connection=socket
(
AF_INET,
SOCK_STREAM,
0
);
printf("valeur de la socket = %d\n",Desc_Socket_Connection);
ZeroMemory(&Adresse_Socket_Connection,sizeof(Adresse_Socket_Connection));
Adresse_Socket_Connection.sin_family=AF_INET;
Adresse_Socket_Connection.sin_port=htons(PORT);
Code_Retour=bind
(
Desc_Socket_Connection,
(struct sockaddr*)&Adresse_Socket_Connection,
sizeof(Adresse_Socket_Connection)
);
if(Code_Retour!=0)
{
perror("bind\t");
getch();
closesocket(Desc_Socket_Connection);
WSACleanup();
exit(errno);
}
Code_Retour=listen(Desc_Socket_Connection,Nb_Max_de_Client);
if(Code_Retour!=0)
{
perror("listen\n");
WSACleanup();
exit(errno);
}
printf("serveur en attente d'une connection\n\n");
printf("***************arret du serveur par<CTRL><C>**************\n\n");
while(TRUE)
{
SOCKET * pt_Nouveau_Socket_Serveur;
SOCKADDR_IN Adresse_Socket_Cliente;
int Longueur_Adresse;
HANDLE hthread;
DWORD threadID;
pt_Nouveau_Socket_Serveur = new SOCKET;
Longueur_Adresse = sizeof(Adresse_Socket_Cliente);
*pt_Nouveau_Socket_Serveur=accept
(
Desc_Socket_Connection,
(struct sockaddr*)&Adresse_Socket_Cliente,
&Longueur_Adresse
);
printf("connection accepte depuis le port client %d\n",
ntohs(Adresse_Socket_Cliente.sin_port));
hthread=CreateThread
(
NULL,
0,
(LPTHREAD_START_ROUTINE)Fonction_Thread_Serveur,
(LPVOID)*pt_Nouveau_Socket_Serveur,
0,
&threadID
);
}
return (0);
} |
Le problème est que mon client ne veut pas dialoguer avec ce serveur.
Client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <errno.h>
#include <iostream.h>
#include <sys/types.h>
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
struct sockaddr_in addr;
struct hostent *host;
int port;
char *buff;
char hostn[50];
int sock;
int c;
int r;
struct protoent *proto;
int main(int argc, char* argv[])
{
int conect, ret;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
cout<<"Ecrivez le nom du serveur\n";
cin>> hostn;
cout<<"Ecrivez le port\n";
cin>>port;
host=gethostbyname(hostn);
cout<<hostn<<":"<<port<<"\n";
sock=socket(AF_INET, SOCK_STREAM, 0);
if(sock<0)
{
printf("Creation de la socket echoue\n");
}
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr =*((unsigned long *)host->h_addr_list[0]);
conect=connect(sock,(struct sockaddr *) &addr,sizeof(addr));
buff=(char*) malloc (100);
ret=recv(sock,buff,100,0);
buff[ret]=0;
printf("message recu :");
puts(buff);
printf("\n");
free(buff);
closesocket(sock);
WSACleanup();
return 0;
} |
Je vous préviens je suis vraiment débutant dans ce domaine merci d'être indulgent:oops:.
merci