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
| server::server(int p)
{
port = p;
//running = false;
}
int server::init()
{
WORD wVersionRequested;
WSADATA Data;
int error= (WSAStartup(MAKEWORD(2,2), &Data ));
if(error != 0 )
{
cerr <<"WSAStartup a échoué "<< endl;
return 1;
}
else
{
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons( port );
// ServerAddr.sin_addr.s_addr=inet_addr("192.168.241.174");
ServerAddr.sin_addr.s_addr=htons(INADDR_ANY) ;
}
cout <<"server correctement initialise" << endl;
return 0;
}
DWORD WINAPI server::ClientThread(void * p)
{
struct thread_param *Obj = (struct thread_param *) p ;
//coversion de p en objet de la structure thread_param
server *s = Obj->ser; // mettre le contenu de ser dans *s
cout << "thread client demarre" << endl;
char buffer[100];
//**** envoi ****
strcpy(buffer, "coucou \n");
send(Obj->soc, buffer,strlen(buffer), 0);
cout<<"message envoye"<<endl;
int reponse = 0;
do
{
// cout<<"******** reception ...********"<<endl;
reponse = recv(Obj->soc, buffer, sizeof(buffer), 0);
cout<<"reponse"<<reponse<<endl;
buffer[reponse]='\0';
cout<<"msg recu "<<buffer<<endl;
}while(reponse=0);
return 0;
}
int server::start ()
{
SOCKADDR_IN ClientAddr;
int ClientAddrLen;
HANDLE hProcessThread;
struct thread_param p;
ListeningSocket = socket(AF_INET, SOCK_STREAM, 0);
if(ListeningSocket == INVALID_SOCKET)
{
perror("socket()");
exit(-1);
}
cout <<"socket correctement creee" << endl;
if( bind( ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof( ServerAddr ) ) == SOCKET_ERROR )
{
cerr<<"bind a echoue avec l'erreur "<< WSAGetLastError()<< endl;
cerr<<"Le port est peut-être deja utilise par un autre processus "<< endl;
return 1;
}
cerr<<"Bind... "<< endl;
if( listen( ListeningSocket, 5 ) == SOCKET_ERROR )
{
cerr<<"listen a échoué avec l'erreur "<< WSAGetLastError()<< endl;
return 1;
}
cout <<"serveur demarre : a l ecoute du port "<<port<< endl;
running = true;
ClientAddrLen = sizeof( ClientAddr );
while(running)
{
if(Newconnection = accept(ListeningSocket, (struct sockaddr *)&ClientAddr, &ClientAddrLen) == INVALID_SOCKET)
{
cout<<"accept a echoue avec l erreur "<< WSAGetLastError() << endl;
return 1;
}
p.ser=this;
p.soc=Newconnection;
cout<<"client connecte..."<<endl;
hProcessThread = CreateThread(NULL, 0,&server::ClientThread, &p,0,NULL);
if ( hProcessThread == NULL )
{
cerr <<"CreateThread a échoué avec l'erreur "<<GetLastError()<< endl;
}
}
closesocket( ListeningSocket );
WSACleanup();
return 0;
} |
Partager