------------------- Creation d'un socket23 ------------------- Eh oui voila le premier guide sur la programmation des taupes :). Ce document ne s'adresse qu'aux programmeurs :)...pas aux petits lamerz car je ne distribuerai ni source ni executable :)). Je dis ça car on voit une incroyable quantité de sale petit lamerz qui réclame des taupes...ils ne trouveront pas ici ce qu'ils cherchent :)). Bon sinon pour compiler une taupe vous aurez besoin d'un compilateur pour windoz 95..Borland C++ par exemple... moi j'utilise Watcom C++ 10.6. Ha autre chose vous devrez inclure et pour pouvoir utiliser les sockets :). Pour faire une taupe, il suffit, en résumé d'ouvrir un port pour que vous puissiez entrez dans le systéme de l'imbécile qui l'a executer...Pour faire cela il y a differentes étapes à suivres: 1-Initialiser le système des sockets 2-Initialiser un socket 3-Ouvrir un port sur le socket 4-Mettre ce port en lecture 5-Attendre une connection sur ce port... Nous allons étudier chaqu'une des étapes précédente... Windoz(et seulement lui) à besoin d'initialiser un systéme de socket...cette commande ce fait via la fonction 'WSAStartup'. Cette fonction prend plusieurs paramètres: le premier est la version du socket désirée et le second un bloc d'information général des sockets. Le premier paramètre est un mot dont le byte haut est le moins important et le byte bas le plus important. Le deuxiéme paramètre est une structure de type WSADATA... En cas d'erreur la fonction renvoie une valeur differente de zero. ex: int Version_requise; WSADATA data_socket; Version_requise=MAKEWORD(1,1); WSAStartup(Version_requise,&data_socket); Pour créer un socket il existe une commande très simple...socket :). Elle prend 3 paramètre, le premier est relatif au type de rézo utilisé, le deuxième définit le type du socket et le dernier est relatif au type de protocole voulu. Le premier paramètre sera toujours AF_INET pour nous car c'est le seul accépté par windoz. Le deuxième sera SOCK_STREAM pour permettre l'échange dans les 2 sens façilement et le dernier sera toujours 0 car nous ne voulons pas spécifier de protocole précis... La fonction renvoie un unsigned qui sera le numéro du socket ou alors INVALID_SOCKET si l'initialisation rate. ex: unsigned the_socket; the_socket=socket(AF_INET,SOCK_STREAM,0); Ouvrir un port sur un socket ce fait via la fonction bind. Cette fonction prend 3 paramètre, le premier est le numéro du socket, le deuxième est un structure de type SOCKADDR_IN et la 3éme est la taille de la structure précédente... La structure SOCKADDR_IN contient plusieurs paramètre à initialiser d'abord ->sin.family qui contient la famille du socket donc AF_INET, ensuite ->sin_addr.s_addr qui sera toujours à 0 et enfin ->sin_port qui contiendra le numéro du port en network byte pour avoir cela il suffit de récupérer la valeur renvoyé par htons(numéro_du_port)... Cette fonction renvoie une valeure differente de zero en cas d'erreur. ex: SOCKADDR_IN info_socket; info_socket.sin_family=AF_INET; info_socket.sin_addr.s_addr=0; info_socket.sin_port=htons(1234); bind(the_socket,(LPSOCKADDR)&info_socket,sizeof(info_socket)); Cette commande ce fait via la fonction listen. Cette fonction très simple ne prend que 2 paramètres...le premier est le numéro du socket et le second le nombre de thread(connection maximum sur le socket?). Si tout se passe bien la fonction revoie zero. ex: listen(the_socket,1); En fait la intervient un truc qui nous façilite la vie :). C'est la commande accept. Cette commande en fait accepte une connection si il y en a une et si il n'y en a pas elle met le programme en pause en attendant une...magnifique non? Bon donc cette commande prend 3 paramètres, le premier est le numéro du socket qu'on attend, le deuxiéme un pointeur sur une strucutre SOCKADDR_IN et le troisième la taille du précédent... Cette fonction renvoie un socket temporaire qui est en fait la connection établit...c un unsigned comme un socket normal... ex: int taille; unsigned socket_connection; SOCKADDR_in info_socket_2; taille=sizeof(SOCKADDR_IN); socket_connection=accept(the_socket,(struct SOCKADDR *)&info_socket_2,&taille); Bon comme je viens de le dire la command accept met le programme en pause tant qu'il n'y a pas de connection...donc rien de plus simple que de faire par exemple ceci: infinit_loop: socket_connection=accept(the_socket,(struct SOCKADDR *)&info_socket_2,&taille); MessageBox(NULL,"Salut mec :)","Hello",MB_OK); shutdown(the_socket,2); shutdown(socket_connection,2); goto infinit_loop; Cette simple boucle fera que le programme attend votre connection, puis quand vous vous connectez sur le port affiche une MessageBox, quand l'utilisateur clique ok cela ferme la connection, et il attend de nouveau pour la connection et ainsi de suite :). Bon vous voyez c'est pas dur de faire une taupe(quand on sait programmer bien sur :)). La fois prochaine je ferais un cours sur comment faire un interface et d'autres trucs :). Finalement j'ai décidé d'inclure la taupe dans ce zine car elle est innofensive :).