"Socket-Coding Tome #2 : Un faux-serveur tiens!" /\ / \ <- Un Alpha Decstation / \ cacher derriere un /______\ triangle blanc. Pour ceux qui ont suivis le precedent article sur le socket programming voici la suite tant attendu mais pour ceux qui n'ont pas reussi, cela n'est pas important. Car c'est en pratiquant qu'on apprend. Maintenant fabriquons un faux-serveur wingate qui aura pour but de niaiser les wingates scanner (les leurrer). Le client se connectera a votre serveur et recevra le msg du faux-wingate et croira alors avoir trouver un wingate. Il se connectera ensuite dessus, biensur cela ne marchera pas. Cette exemple est a faire pour but d'augmenter votre connaisance en programmation socket, rien de vraiment utile a faire ca :-) ps: ce texte est une modification du Usersguide-Echo server Preparation: ------------ Il vous faut: Visual Basic 32 bits (C) Socket Wrench 32 bits (free) Un peu de jugotte Visual Basic est copyright, vous le trouverez par warez ou en l'achetant :-) Scoket Wrench est totallement gratuit , downloader le 16 ou le 32 bit version au: http://www.socket-wrench.om La jugotte n'est pas gratuit et ne sachete pas, vous devez la posseder :/ Debut: ------ - Ouvrez un nouveaux Form(formulaire/feuille); - Inserez le composant SocketWrench TCPip - Inserez le module C:\cstool\sample\vb\cssock.bas Imaginons un systeme qui pourra permettre a 1000 users de se connecter en meme temps (ce qui est semble-toute impossible) vous allez donc apprendre a manipuler les variables "Array" c'est a dire un packet de variable dans 1 seule. On definis donc la variable Socket comme etant les communications et Socket(1) pour la premiere communication ( socket connection ) et que Socket(2) est la deuxieme. 1) Definir un array de sockets Placer sur la form, un iconne Socket(controle) [la prise de courant] et copier-coller la 1 deuxieme fois [a partir de la meme ] et VB vous demanderas si vous voulez faire un array, dites oui et effacer la deuxieme iconne. Cela va creer un element socket1 array renommer socket1 pour socket. 2) Initialiser le socket qui va lire les connections. a) foutez dim lastsocket dans le "global declaration". B) Un socket (le 0) va rediriger les connections sur les autres (1..~+) pour ainsi creer un packet de connections en meme temps. Donc dans le sub du Form_load inserez-y ceci: socket(0).AddressFamily = AF_INET 'Pour internet biensur socket(0).Protocol = IPPROTO_IP 'TCPIP vs UDP, on prend le TCPIP socket(0).SocketType = SOCK_STREAM 'ce type est a 99% toujours utiliser socket(0).Blocking = False 'toujours a false socket(0).LocalPort = 23 'port Wingate/telnet socket(0).Action = SOCKET_LISTEN 'action dattendre une connection lastsocket = 0 ' 0 socket de connecter Bon voila, vous avez un port 23 qui attend pour les connections exterieurs mais c'est pas tout, a chaque detection de connection nous devons transferer la connection sur un socket definis(1,2,3,4,5...+) Vous pouvez avoir un maximum de 65 536 collections simultannées :] Donc dans Private Sub socket_Accept(Index As Integer, SocketId As Integer) vous mettez: Dim i As Integer For i = 1 To lastsocket If Not socket(i).Connected Then Exit For Next i If i > lastsocket Then lastsocket = lastsocket + 1: i = lastsocket Load socket(i)) End If socket(i).AddressFamily = AF_INET socket(i).Protocol = IPPROTO_IP socket(i).SocketType = SOCK_STREAM socket(i).Binary = False socket(i).BufferSize = 1024 socket(i).Blocking = False socket(i).Accept = SocketId socket(i).Connect --- Et voila, maintenant quand on va se plugger sur votre port 23 ca va etablir une connection mais biensur rien ne se passera pour l'instant. Ajouter ceci : Private Sub node_Connect(Index As Integer) dim leure as string leure = "WINGATE>" socket(index).write leure,len(leure) ' envoie a la connection la variable LEURE End sub Maintenant a chaque connection ca va envoyer "WINGATE>" comme prevu. Maintenant que tout fonctionne, occupons-nous des choses imprevus comme ski arrive si par exemple, l'usager se deconnecte, si vous fermez le programme.. Donc ajouter. Private Sub Form_Unload(Cancel As Integer) Dim i As Integer If socket(0).Listening Then socket(0).Action = SOCKET_CLOSE For i = 1 To lastsocket If socket(i).Connected Then socket(i).Action = SOCKET_CLOSE Next i End et Private Sub socket_Disconnect(Index As Integer) socket(Index).Action = SOCKET_CLOSE End Sub Voila tout est finis pour ski avait a coder, maintenant reexpliquons les nouvelle fonctions utiliser: SOCKET(x).write contenu, grosseur du contenu -------------------------------------------- Dans notre ca leurre enfermais "WINGATE>" et nous l'utilisions comme contenu. pour trouver ca grosseur vous faite len(leure) = LENGTH OF leure dans le cas du leure "wingate>" il retourne le chiffre = 8 car "wingate>" est de 8 lettres. SOCKET_LISTEN ------------- Permet decouter/de recevoir , on apelle ceci un socket passif il attend une connection pour faire quelque chose dans le sub socket(x).accept <- qui veut dire connection accepter. Derniere chose: Maintenant que le programme fonctionne prenez telnet de windows et connectez vous sur votre port 23: ip 127.0.0.1(localhost) voir si ca fonctionne. __2.agree-with-it