Bonjour,

Je suis entrain de créer un serveur multi-client avec des threads...
le problème apparaît lors de l'appel de ma fonction CreateThread
#
hProcessThread = CreateThread(NULL, 0,&server::ClientThread, &p,0,NULL);
#
et exactement dans le 3 éme paramètre parce ma fonction " ClientThread" doit retourner quelque chose ( je sais pas ce qu'elle doit retourner ) .

voilà mon code :

#
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
}
#

Merci d'avance