Bonjour
J'ai un probleme que je ne comprend pas.
J'essae de realiser un serveur pouvant accepter plusieurs clients
pour cela je cr�e un thread du serveur pour pouvoir accepter toute les connexions entrantes et un thread client quand un client est accept� mon souci est que je n'arrive pas a attacher le handle de la socket du client
le code
un typedef pour passer met variable a travers les thread
le thread du serveur
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 typedef struct MYVAR{ CListBox* mylist; SOCKET* handle; }MYVAR;
et le thread du client ou j'ai l'erreur
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 MYVAR* thevarserver = (MYVAR*)Param; if (!AfxSocketInit()) thevarserver->mylist->AddString("Init socket not OK"); //initialisation des sockets CSocket *Lsocket=new CSocket; //socket d'ecoute CSocket *Wsocket=new CSocket; //socket de travail SOCKET hConnected; //handle de socket, pour le passage a l'autre thread if (Lsocket->Create(PORT,SOCK_STREAM)) //creation de a socket TCP (pour UDP: SOCK_DGRAM) { thevarserver->mylist->AddString("Server started"); Lsocket->Listen(); //mise de la socket en mode �coute (pas mode r�ception) thevarserver->mylist->AddString("Listen started"); while(1) { mutex.Lock(); //prend le mutex Lsocket->Accept(*Wsocket); //Redirige la connection entrante sur la socket de travail hConnected = Wsocket->Detach(); //recupere les parametres de la socket de travail MYVAR * thevarclient = new MYVAR; thevarclient->mylist = thevarserver->mylist; thevarclient->handle = &hConnected; AfxBeginThread(Client,thevarclient);//lance la fonction travail comme nouveau thread, avec parametre de socket thevarserver->mylist->AddString("wait for client"); thevarserver->mylist->EnableWindow(true); }
l'erreur est :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 UINT CMyServerDlg::Client(LPVOID sock) { MYVAR* thevarclient = (MYVAR*)sock; char rdBuf[100]; CSocket *Wsocket=new CSocket; //socket de travail Wsocket->Attach(*thevarclient->handle); //parametrage de la nouvelle socket de travail
DEBUG ASSERTION FAILED
Program...
File: f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\map_pp.cpp
Line : 179
ensuivant pas pas j'arrive a
ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL);
dans sockcore.cpp fonction void PASCAL CAsyncSocket::AttachHandle(SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead)
qui me cree l'assertion
cordialement
Partager