begin process at 2012 05 30 12:38:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

WSA


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

WSA

jeudi 28 octobre 2004 à 23:49:10 | WSA

ToToL

Membre Club
Salut

cela fait plusieurs heure que je cherche ( mais je doit mal chercher ) comment utiliser les Events des fonctions WSA. entre le WSAWaitForMultipleEvents ou WSAEnumNetworkEvents et d'autre encore je n'arrive plus a m'y retrouver.

Vous n'auriez pas un tutorial bien fait et bien expliquer ??
Si vous voulez et si c'est pas trop long pour vous , vous pouvez me faire un petit tutorial ici :-D

Merci
Thomas
vendredi 29 octobre 2004 à 00:02:19 | Re : WSA

aardman

Membre Club
Salut,
Ma source http://www.cppfrance.com/code.aspx?id=24109 utilise le modele WSAEventSelect (et donc les fonctions WSAWaitForMultipleEvents & WSAEnumNetworkEvents).

Sinon voici un bouquin qui explique les divers modeles d'utilisation de winsock, tout y est expliqué:
http://betouchi.free.fr/doc_et_ebook/prog_reseau/network2.chm
vendredi 29 octobre 2004 à 00:06:54 | Re : WSA

ToToL

Membre Club
justement pour mon programme avec les event je me suis baser sur le tient mais sa ne marche pas :( j'arrive pa a trouver le code

voici mon code source :



WSADATA Wsa;
sockaddr_in sin;
WSAEVENT WsaEvent[1];
WSANETWORKEVENTS NetworkEvent;
int breakpoint =0;

if(WSAStartup(MAKEWORD(2,2),&Wsa)) return 0;

SocketDL = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.150");

WsaEvent[0] = WSACreateEvent();
WSAEventSelect(SocketDL, WsaEvent[0], FD_READ | FD_CONNECT | FD_CLOSE);

connect(SocketDL, (sockaddr*)&sin, sizeof(sin));

while(!breakpoint)
{
memset(&NetworkEvent, 0, sizeof(NetworkEvent));

WSAWaitForMultipleEvents(1, WsaEvent, 0, WSA_INFINITE, 0);
WSAEnumNetworkEvents(SocketDL, &WsaEvent[0], &NetworkEvent);

switch (NetworkEvent.lNetworkEvents)
{

case FD_CONNECT:
MessageBox(NULL,"Message FD_CONNECT recu","chemin",MB_OK);
break;

}

}


le truc c'est que avec ton programme et la meme url que j'utilise dans le mien , sa marche :( mais avec mon programme sa marche pas .

t'aurai pas une solution ?

Merci
Thomas
vendredi 29 octobre 2004 à 00:24:41 | Re : WSA

aardman

Membre Club
Salut,
FD_* sont des flag, et NetworkEvent.lNetworkEvents peut contenir plusieurs de ces flags en meme temp.
Voila pourquoi dans ma source je fais:
if(NetworkEvent.lNetworkEvents & FD_CONNECT)
{
}
if(NetworkEvent.lNetworkEvents & FD_READ)
{
}

et non pas un switch comme tu fais.


vendredi 29 octobre 2004 à 00:27:34 | Re : WSA

ToToL

Membre Club
meme en utilisant ton if sa fait la meme chose dc l'erreur vient d'autre part. t'aurai pas une idée ?

Merci
Thomas
vendredi 29 octobre 2004 à 00:33:32 | Re : WSA

aardman

Membre Club
Salut,
Comme ca je vois pas non...
Dans ton code il n'y a aucun traitement des erreurs, je crois que ca serait bien de le rajouter (socket peut retourner -1, etc..).

Et quand il y a une erreur, il faut appeler WSAGetLastError() pour se faire une idée plus précise de l'erreur.
vendredi 29 octobre 2004 à 01:22:50 | Re : WSA

ToToL

Membre Club
Voici le nouveau code :



WSADATA Wsa;
sockaddr_in sin;
WSAEVENT WsaEvent[1];
WSANETWORKEVENTS NetworkEvent;
if(WSAStartup(MAKEWORD(2,2),&Wsa) != NO_ERROR) MessageBox(NULL,"Impossible de charger WSA","chemin",MB_OK);

if ( (SocketDL = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET ) MessageBox(NULL,"Socket Invalide","chemin",MB_OK);

sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.150");

WsaEvent[0] = WSACreateEvent();
if ( WsaEvent[0] == WSA_INVALID_EVENT ) MessageBox(NULL,"Probleme de CreatEvent","chemin",MB_OK);
if ( (WSAEventSelect(SocketDL, WsaEvent[0], FD_READ | FD_CONNECT | FD_CLOSE)) == SOCKET_ERROR ) MessageBox(NULL,"Probleme de EventSelect","chemin",MB_OK);

if ( (connect(SocketDL, (sockaddr*)&sin, sizeof(sin))) == SOCKET_ERROR ) MessageBox(NULL,"Probleme de connecxion","chemin",MB_OK);

while(!breakpoint)
{
memset(&NetworkEvent, 0, sizeof(NetworkEvent));

if ( (WSAWaitForMultipleEvents(1, WsaEvent, 0, WSA_INFINITE, 0)) == WSA_WAIT_FAILED ) MessageBox(NULL,"Problème de WaitForMultipleEvents","chemin",MB_OK);
if ( (WSAEnumNetworkEvents(SocketDL, &WsaEvent[0], &NetworkEvent)) == SOCKET_ERROR ) MessageBox(NULL,"Problème de EnumNetworkEvents","chemin",MB_OK);

if(NetworkEvent.lNetworkEvents & FD_CONNECT)
{MessageBox(NULL,"Message FD_CONNECT recu","chemin",MB_OK);}

}



Les bugg obtenu sont ceux de la fonction connect() et de la fonction WSAEnumNetworkEvents().

La fonction WSAEnumNetworkEvents je comprend car s'il est pas connecter sa plante mais la focntion connect je ne voit pas pourquoi car j'ai toujours fait comme ca et sa a toujours marcher.

bizar tout ca.

Avec toutes ces info tu voit mieu ??

Merci
Thomas
vendredi 29 octobre 2004 à 01:30:50 | Re : WSA

ToToL

Membre Club
J'ai oublier de te dir , le message d'erreur est WSAEWOULDBLOCK

Si sa peut t'aider.

Merci
Thomas
vendredi 29 octobre 2004 à 01:34:10 | Re : WSA

aardman

Membre Club
Salut,
Il faudrait rajouter les WSAGetLastError, sinon ca sert a rien.

Pour le connect qui retourne une erreur, ce n'est pas un plantage mais c'est normal. Le socket est en mode non bloquant, et connect ne peut pas se connecter au serveur instantanément, donc il retourne WSAEWOULDBLOCK, qui veut dire que l'opération n'est pas encore terminée.

Je pense que tu devrais lire le bouquin que je t'ai passé plus haut.
vendredi 29 octobre 2004 à 01:35:59 | Re : WSA

ToToL

Membre Club
D'accord mais comment savoir quand l'opération est terminée ?

1 2

Cette discussion est classée dans : tutorial, wsa


Répondre à ce message

Sujets en rapport avec ce message

Demande de tutorial et de code source... [ par MaTHieU ] Salut,Tout d'abord, merci pour ce superbe site !Je cherche des cours pour apprendre à faire des tunnel et du plasma en Visual C++ ou des codes sources Webmaster pffffffffffff [ par virus ] Webmaster, tu pourrais au moin faire un tutorial pour apprendre a programmer en visual c++!!les tutoriaux qu il y a dans la section tutoriaux c de la tutorial réseau c++ [ par paisibleman ] Bonjour ! Quelqu'un saurait il où je peux trouver un bon tutorial pour commencer la programation réseau en c++ ? Merci :) Tutorial sur les templates [ par mikez ] Est-ce que quelqu'un connait un bon tutorial sur la prog des templates? cherche tutorial du scribble en francais [ par stephanie ] salut alors voila, etant vraiment trop nulleen anglais mais aimant programmerje recherche desesperemment letutorial du scribble en francaiscelui du ms tutorial ou code GLUT [ par francky ] SALUT,je débute avec dev c, et j'aimerais créer une interface portable aussi bien sous window que sous linux;mon probleme: j'ai bien trouver glui, mai Tutorial C [ par god ] je cherche des tutoriaux de C ou C++ d'un bon niveau, et en particulier sur la programmation systeme. Merci NEED TUTORIAL C++ [ par Arkko ] J'aimerais savoir si quelquun a des bon tutos pour apprendre le c++ car je fais seulement du VB.merci d'avance Tutorial Installshield pour Visual C++ [ par magik ] Bonjour a tous,Je cherche un tutorial qui expliquerai comment utiliser Installshield pour visual c++ ou un site ou je pourrais trouver l'information.M URGENT : Cherche tutorial OpenGL [ par dominiquox ] Salut à tous les programmeurs en herbe ...Est-ce qu'il faut connaitre impérativement le C++ sous Win32 pour Faire de l'OpenGL ?Si oui, Est ce que qq p


Nos sponsors


Sondage...

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,967 sec (4)

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