begin process at 2012 05 30 13:47:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Réseau / Internet

 > 

Thread et socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread et socket

jeudi 28 août 2003 à 12:36:08 | Thread et socket

epoc

Petite question.

J'ai créé un petit serveur avec un socket 'bloquant'. Etant donné que je désire que mon aplication ne soit pas bloquée j'ai créé un thread, dérivé de la class CWinThread dans lequel va tourner le socket d'écoute. J'espérais ainsi que mon application principale ne freeze pas. Et bien non! Ca freeze quand même. Peut on m'expliquer une telle chose?

A partir de là ne vaut il pas mieux tout recommencer avec CAsyncSocket?
jeudi 28 août 2003 à 17:21:04 | Re : Thread et socket

aardman

Membre Club
Salut,
tu as mis quoi exactement dans ton thread ?


-------------------------------
Réponse au message :
-------------------------------

> Petite question.
>
> J'ai créé un petit serveur avec un socket 'bloquant'. Etant donné que je désire que mon aplication ne soit pas bloquée j'ai créé un thread, dérivé de la class CWinThread dans lequel va tourner le socket d'écoute. J'espérais ainsi que mon application principale ne freeze pas. Et bien non! Ca freeze quand même. Peut on m'expliquer une telle chose?
>
> A partir de là ne vaut il pas mieux tout recommencer avec CAsyncSocket?
jeudi 28 août 2003 à 19:36:56 | Re : Thread et socket

epoc

Bon g résolu mon prob grace à ça :

lien msdn

en fait quand on crée un thread avec AfxBeginThread() y'a 2 possibilités, soit faire un thread d'interface, qui je suppose est lié à notre fenêtre principale ou un thread de travail, utilisé pour les calculs d'arrière plan. Moi au départ j'avais fait un thread d'interface (je savais pas pour l'autre). là g modifié ma source en thread de travail et ça fonctionne parfaitement.

dsl pour le dérangement et merci de t'être intéressé à mon prob ;-)

++

-------------------------------
Réponse au message :
-------------------------------

> Salut,
> tu as mis quoi exactement dans ton thread ?
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Petite question.
> >
> > J'ai créé un petit serveur avec un socket 'bloquant'. Etant donné que je désire que mon aplication ne soit pas bloquée j'ai créé un thread, dérivé de la class CWinThread dans lequel va tourner le socket d'écoute. J'espérais ainsi que mon application principale ne freeze pas. Et bien non! Ca freeze quand même. Peut on m'expliquer une telle chose?
> >
> > A partir de là ne vaut il pas mieux tout recommencer avec CAsyncSocket?
>
jeudi 6 mai 2004 à 12:47:47 | Re : Thread et socket

mooolo

> tu as mis quoi exactement dans ton thread ?

mardi 9 février 2010 à 11:42:19 | Re : Thread et socket

valantino1




Bonjour tr le monde ,

en faite je suis entrain de programmer une ptite application multithread qui envoie des sockets à des @ IP(10 @ en simultané) et selon le retour de select de socket il decode l'entete(IpHeader) et revoi le resultat ; si on teste la select avec un seul poste en simultané il marche trés biens alors que lorsque je tente de le testé avec plus que de 2 en simultanés la select retourne toujours 1 = sig que la select contient des donnees alors ce n est pas le cas ! (car ces adresses IP ne sont pas connectés ) !
voila un extrait de code :

// Initialisation du nombre de ping à faire = nombre de retrait
if(iNBPing == 0)
iNBPing = NBPINGDEFAULT;//si le nombre de retarit est a 0 on prend le nombre par default 1.

// Initialisation du délai d'attente
if(iTpsLimite == 0)
iTpsLimite = DEFALUTTIMEOUT;//si le delai d'attente est 0 on prend le timeout par defaut 1000 MS

while((CHote->iNbRetryUsed != iNBPing)&&(!bRstConn))
{
memset(szICMP_data,0,DATASIZE_ICMP);
iID = (unsigned short)GetCurrentProcessId() + CHote->iNbRetryUsed;
// Construction du paquet ICMP
IcmpHeader *icmp_hdr;
icmp_hdr = (IcmpHeader*)szICMP_data;
icmp_hdr->type = TYPE_ICMP_ECHO; // Type du paquet ICMP : echo request
icmp_hdr->code = CODE_ICMP_NULL; // Il n'y a pas de code spécifique pour ce type de paquet
icmp_hdr->id = iID;//identificateur de paquet
icmp_hdr->sequence = SEQU_ICMP_ECHO;
icmp_hdr->timestamp = GetTickCount(); // Initialisation du temps lors de l'envoi

// Somme de contrôle sur 16 bits
((IcmpHeader*)szICMP_data)->checksum = checksum((unsigned short*)szICMP_data, DATASIZE_ICMP);

// On envoie le paquet ICMP que l'on a construit
iEnvoi = sendto(sock, szICMP_data, DATASIZE_ICMP, 0, (struct sockaddr *)&sin, DATASIZE_ICMP);
FD_ZERO(&fdsr);
FD_SET(sock, &fdsr);

tv_timeout.tv_sec = iTpsLimite/1000;
tv_timeout.tv_usec = 0;


iFindelai = 0;

do{
if (select(sock+1, &fdsr, NULL, NULL, &tv_timeout) <= 0)
{
// Dans le cas où le temps est écoulé, on veut sortir de la boucle
// on compte le paquet comme envoyé mais perdu
// delai d'attente de la demande depassée
CHote->iNbRetryUsed = CHote->iNbRetryUsed+1;
iPerte= iPerte+1;
iFindelai = 1;

}

//Cette fonction vérifie si le descripteur "sock" est contenu dans l'ensemble "fdsr" après l'appel à select.
if (FD_ISSET(sock, &fdsr))
{
// Dans le cas où le buffer du socket contient des données,
// on les décode
iRecept=recvfrom(sock, szRecvbuf, MAX_PACKET, 0, (struct sockaddr *)&from, &iFromlen);

/***********************************************************/
iphdr = (IpHeader *)szRecvbuf;
iphdrlen = iphdr->h_len * 4 ;
icmphdr = (IcmpHeader*)(szRecvbuf + iphdrlen);

if(iID!=(icmphdr->id))
{
// Cas où le paquet n'est pas à nous
iFindelai= 0;
}
else
{
CHote->iNbRetryUsed = CHote->iNbRetryUsed +1;
iFindelai= 1;
}

/***************************************************/

memset(szRecvbuf,0,MAX_PACKET);
//dés la prmiere ping : si on a l'envoi est supérieur de perte on sort
if((CHote->iNbRetryUsed-iPerte)>0)
bRstConn=true;

}
}
while(iFindelai == 0);
}


Cette discussion est classée dans : socket, thread, créé, freeze


Répondre à ce message

Sujets en rapport avec ce message

Probleme thread [ par PunkDude424 ] J'ai un probleme avec les threadJ,ai un server et jessai de créer un thread a chaque fois quun client se connecte, mais sa fonctionne pas.J,ai essayer thread [ par m10s11 ] pour un prog créé avec l'appWizard je voudrais utiliser des threads or apres avoir créé les threads je n'arrive pas a les lier a des fonctions graphiq Thread et socket udp [ par eurysthe ] Bonjour !!Voila j'ai un petit problème de thread qui me pourrit la vie.J'ai crée un thread qui doit écouter en boucle les informations qui transite su Socket [ par c2millet ] Bonjour à tous,je voudrais dans un premier tps si qqun a ou connais une doc sur les sockets. Ensuite, g un petit pb. g réalisé un serveur qui lit sur Probleme avec un Thread créant une socket [ par lapinfroid ] Bonjour a tous ,c'est la premiere fois que je poste sur ce forumDonc si jamais je ne respecte pas toutes les regles n'hesitez pas a me le signalerVoic LAN Socket et multi thread [ par RV2931 ] Bonjour, Je suis en train d'essayer de faire un chat en réseau, chaque machine est client/serveur sur un port. Mais on m'a conseillé de faire un threa Problème de .h débutant [ par matt22 ] Bonjour à tous.j'ai quelques notions en c++ mais de gros problème à bien comprendre les .h et comment bien les utiliser.J'avais une application avec j socket single-thread multi-thread [ par katsankat ] Salut :) Pour un serveur, quelqu'un sait-il en quelles circonstances il faut favoriser le single-thread, et quels sont les avantages du multi-thread? Sdl_net + pthread probleme d'argument [ par Defaite ] Bonjour à tous.Voila mon problème, j'ai une thread ( en Pthread ) qui devrait s'occuper d'un socket.Seulement voila, impossible de dire à ma thread co HTTP, SQUID, SOCKET !!!! [ par let_me_in ] bonjour tout le monde, je voulais faire un proxy sans se casser trop la tete alors j'ai bricolé un peu, j'ai lancer squid, j'ai lancer mon application


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales