Winsock

cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008 - 17 mai 2004 à 19:08
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 19 mai 2004 à 09:07
Bonjours,

J'ai quelque souci avec winsock en win32.
Je me suis basé sur des tutoriaux mod consol car il n'y a que sa mais a parament il faut mettre d'autre chose pour le passer en win32.
j'arrive a démarrer un server ( win 32 ) et quand mon client se connecte dessu ( en mod commande car pour l'instant je tente de faire un server ) et bien ma fenetre win32 se bloque ..... ecran blanc et sa ne revien jamais normalement alors que ma fenetre ms dos a tres bien recu le message.
Voici mon source : http://totol16.free.fr/main.cpp

Si vous avez la reponse a mon probleme je suis preneur, pareille si vous avez un tutorial a me passer sur le winsock en win32

++

Thomas

14 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 mai 2004 à 19:50
J'ai fait une source qui traite de sockets asynchrones (non-bloquantes) en win32.
Voici l'url :

http://www.cppfrance.com/code.aspx?ID=21303

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
17 mai 2004 à 20:37
Merci mais je n'arrive pas a comprendre ta source ( je debut le win32 et j'ai commencer les socker il ya a 5h ... ) peut tu me faire un petit server qui, des qu'un personne se connecte dessu , renvoi un message ( par exemple hello world ) ??

Merci et aurevoir
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
18 mai 2004 à 09:00
Ca n'aurais aucun interet que te fasse le programme si ca ne fait que 5h que tu te tentes au socket...
Va plutot a cette URL, c'est un cours en francais qui decrit pas à pas comment creer une application client/serveur :

http://c.developpez.com/WalrusSock/

A++ et bonne continuation...

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 13:06
J'ai trouver aussi ce tutoriel et c'est ce que j'ai fait en premier mais de toute facon il est rapidement fait et compréhensible ( 30 min a 1h je c plus ) et j'ai bien compri comment sa marchait en mod console meme si la aussi il y a quelque probleme : le server = impecable le client met du temps a faire ce que je veut juste apres la connection au server. mais j'ai a peu pres compri le tout.

Tu n'a pas autre chose ????

merci et a plus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
18 mai 2004 à 16:21
Tu veux faire quoi exactement ?
Si tu veux juste apprendre les bases sur les sockets je peux rien te conseiller de plus ...
Si ton client ne marche pas correctement c'est que tu as du faire des erreurs et que donc tu n'as pas bien assimilé les bases!
Dans l'absolu je te conseil deja de réussir a bien faire fonctionner ton programme et ensuite je pourrais ajouter des commentaires à ma source pour t'aider un peu plus sur la programmation de sockets asynchrones, meme s'il n'y a aucune difficultés apparente pour quelqu'un qui a réellement de bonnes bases sur les sockets!

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 17:08
Mon programme en mode console marche bien c'est just que je doit attendre un tout petit peut apres qu'il est fermer le socket pout pouvoir afficher quelque chose sinon tout marche. n'aurai tu pas un site qui explique les socket asynchrones tout du moin les base ??? car dans ce domain je ni connai rien du tout ... genre le site que tu ma donner mais en asynchrone.

@+ et encore merci
Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
18 mai 2004 à 17:35
Ben en fait non,
Je ne connais aucun site qui parle réellement de ca... Ou alors ya quelques morceaux mais c'est en anglais...

Le principe est identique a celui des sockets normal. La différence réside dans le fait que les sockets asynchrones generes des messages qui sont liés a des evenements comme l'envoie ou la reception de données par exemple.
Ces messages sont alors traiter dans la fonction de callback principale.

Des que j'ai le temps je commente ma source pour plus de lisibilité et de compréhension. Je te tiens au courant des que c'est fait...

Pour le reste tu peux regarder du coté de la msdn, tout les messages liées aux socket asynchrones y sont traités.

A++ et bonne continuation...

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 17:45
En fait pour mon probleme de lenteur c'était du au fait que mon client utilisai cout au lieu de printf pour afficher du texte .............
Voila mon mail : thomas.andrejakNOSPAM@wanadoo.fr ( bien sur tu enleve NOSPAM ) j'atten de tes nouvelle et encore merci de m'aider car sans une personne comme toi je serai bloker.

@+
Thomas
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 20:17
C'est bon en consol j'arrive a faire un server qui envoit du text a un client. mais j'arrive pas en meme temps a faire que le client envoi au server car aparament la focntion recv() est blocante. sinon sa marche nikel.
++
Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
18 mai 2004 à 20:32
Au fait dis moi ce que tu ne comprends pas précisement dans ma source ...
Qu'est ce qui pose probleme ?
Est ce que tu comprend la programmation en mode graphique ?
Le role de la fonction de callback ?

Tu es sous quel compilateurs ?

Samir
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 20:44
dans ta source j'ai regarder en gros mais ce que je voudrait c'est savoir chaque fonction faisant quelque chose avec les socket a quoi elle ser , ou il faut la mettre, et que faut il lu donner. mais par exemple je sait a quoi ser BeginPaint .........

++
thomas
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
18 mai 2004 à 22:13
Je vien a nouveau de regarder ton programme et je les mieu compri . le seul truc que je ne comprend pas c'est

send(m_socket,sbuff,strlen(sbuff),0);

en fait moi dans mon programme j'ai di que quand on appui sur UP sa envoi le message donc voici mon petit code :

avec buffer_s qui dans ton code est sbuff et m_sock qui dans ton prog s'appelle m_socket

case WM_KEYDOWN:
if (HIWORD(GetKeyState(VK_UP)))
{
ZeroMemory(buffer_s,300);
strcpy(buffer_s,"Hello\0");
send(m_sock,buffer_s,strlen(buffer_s),0);}
return 0;

sauf qu'avec sa , mon client m'écrit toute la variable buffer_s donc sa me donne Hello suivi de caractere incompréhensible qui non ni queu ni tete.

si a la place de strlen je met sizeof ( dans mon server en mod console je mettai sizeof ..... ) sa me fait ( dans mon client ) : hello suivi de 4 ou 5 a la ligne.

J'arrive pas a savoir pourquoi. sinon j'ai a peut pres compri le reste

Merci et @+

Thomas
0
cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
19 mai 2004 à 07:24
Au fait un autre question ??? peut on envoyer autre chose qu'une chaine de caractère par le socket par exemple un entier voir meme un tableau d'entier ??? ou autre. Si oui comment faire.

++

Thomas
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
19 mai 2004 à 09:07
Le probleme des caracteres illilisble après le "Hello" vient de l'initilisation de ta variable.
Toute chaine de carateres "normallement constituée" se termine par le caractere NULL ("\0") qui est le marqueur de fin.

Il me faudrait ton code entier pour voir d'ou vient le probleme.
Sinon pour ce qui est d'envoyer des entiers, tu ne peux pas les envoyer tel quels. La fonction send() prend en parametre une chaine de caractere.
Pour y remedier, tu va devoir te créer ton propre systeme de codage....
Par exemple a chaque fois que tu enverras des entiers tu mettres t:i/1-2-3-4-5-6-7-8-.... et tu diras a ton programme que si la chaine de caracteres commence pas t:i/ il va s'agir d'une chaine de carateres. J'ai pris t:i/ pout t -> type et i -> integer(entier en anglais).
Ensuite j'ai enuméré les valeurs en les séparants pardes "-", il me sera ainsi facile de les récuperer a l'aide la fonction strtok().

Pour un tableau d'entier unidimensionnel tu pourras mettres t:ti1/, et ainsi de suite ....

A toi de t'organiser comme bon te semble.

Envoie moi ton programme a shellkodeNOSPAM@hotmail.com, pour que je puisse regarder d'ou vient le probleme des carateres illisibles.

A++

Samir
0
Rejoignez-nous