Bonjour à tous,

Bon je voue explique mon probleme:
Mon debut de programe est fait de:
-un main, dans le quel j'attend les connexion puis je crée les threads,
-une class "client_chat" qui gere chaque client (autant d'instance que de client)

Mon probleme ce situe au niveau de l envoi de données dans le socket à partir de serveur, plus précisement dans une instance de la classe client_chat.

Je peut en envoyer dans le construceur (le socket est en permemettre du constructeur) mais au moment de l envoi de donné a partir d'une methode de la meme instance, le socket est detruit et j'obtient une erreur.

voila quelque fragment de code:


la classe client_chat :
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
#include <stdio.h>
#include <pthread.h>
#include <iostream>
using std::cout;
#include "ServerSocket.h"
#include "SocketException.h"
#include <string>
#include "socket.h"
using std::string;
#include <vector>
namespace TOTO{
class client_chat {
	ServerSocket _sock;
	int _id;
  public:
	client_chat (ServerSocket sock,int id);
	void send(string *msg,int id_pv){
	}
	void sendAll();
	void gerer();
 
};
client_chat::client_chat (ServerSocket sock,int id){
		_sock=sock;
		_id=id;
		_sock << "creation...\n"; //ici le message est bien recu par le client.   
		cout << "client construit: " << id << "\n"; 
}
 
void client_chat::sendAll(){
	cout << "^^^^^\n";
	_sock << "bou!!\n"; //ici la connection est perdu.
}
}
le main en partie :
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
while ( true ){
			//préparation d'un socket
			ServerSocket new_sock;
 
			//attente des connexions
			server.accept ( new_sock );
 
			//préparation de la strucure à envoyer en paramettre de pthread_creat
			//(car un seul argument peut etre passé)
			struct thread_data *tmp_data = new thread_data;
			tmp_data->client_id = nbr_client;
			tmp_data->_sock = new_sock;
			cout << tmp_data->client_id << "id premiere ...\n";
			tmp_data->_sock << "processing...\n";
			//creation du thread
			pthread_t *threads = new pthread_t;
 
			//creation du thread
			pthread_create( threads, NULL, relais, (void*)tmp_data );
 
			//stockage des donné (socket et id) des clients 
			//(permet l'envoi des messsages à tous les clients)
			//data_vector.push_back(tmp_data);
 
			//variable bien utile ;-)
			nbr_client++;			
		}
		pthread_exit(NULL);
la "routine" en paramettre de pthread_creat():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
void *relais(void* thread_dat){
	//castage....
	struct thread_data *my_thread_data = (struct thread_data*) thread_dat;
   cout << "New client, id: " << my_thread_data->client_id;
   //creation et gestion du client
   my_thread_data->_sock << "creating client...\n";
   client_chat *_client = new client_chat(my_thread_data->_sock, my_thread_data->client_id);
	_client->sendAll();
   _client->gerer();
	cout << "client gerer\n";
	pthread_exit(NULL);
}
enfin, voila ce que me ressort ma console:
server:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Waiting for connestion on port 30000
0id premiere ...
New client,id: 0client construit: 0
^^^^
3 [sig] server 832 server.exe: *** fatal error - colled with threadlist_ix -1 Hangup[/QUOTE]
client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
[QUOTE]$:telnet127.0.0.1 30000
trying 127.0.0.1...
Connected to 127.0.0.1
Escape charac is .....
processing...
creating client...
creation...
Connection closed by foreign host.

Merci pour votre aide.