cs_Blackwars
Messages postés3Date d'inscriptionmardi 24 février 2004StatutMembreDernière intervention14 février 2006
-
8 févr. 2006 à 21:10
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 2012
-
14 févr. 2006 à 12:39
Bonjour à tous. Je débute en visual basic je commence les winsocks. Mais il y a une chose qui m'est inconcevable. Je voudrais faire un programme jouable en ligne. Rassurez vous, je ne recherche pas le GROS JEU 3D non non et non ! Restons simple, je cherche seulement à faire bouger un point rouge sur un fond noir en deux dimensions et qu'un ami puisse faire de meme avec un point bleu. Et surtout que je puisse voir mon ami bouger son point bleu (et que lui voie mon point rouge). Donc en gros, expliquez moi comment creer une interface graphique banale en 2D (comment l'animer). Et comment faudrait-il que je m'y prenne avec Winsock ?
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 14 févr. 2006 à 12:39
Salut,
En effet c'est le stade au dessus.
Dans ce cas le serveur doit gérer un tableau de sockets, en plus du socket qui sert à l'écoute.
En d'autres termes, un socket est dédié à l' écoute afin d'accepter les
nouveaux arrivants en chargeant pour eux un nouveau socket.
Supposons qu'il s' appelle sk_ecoute. Après avoir invoqué
sa méthode Listen, la seule utilité de ce socket d' écoute réside en
son évènement ConnectionRequest() qui survient lorsqu'un client distant
fait un Connect(). C'est là que le serveur charge un nouveau socket et
le lie au client avec la méthode Accept():
Private sub sk_ecoute_ConnectioRequest(ByVal RequestID as long)
NbConnections = NbConnections + 1
Load me.sk(NbConnections)
me.sk(NbConnections).accept RequestID
End Sub
NbConnections garde trace du nombre de demandes de connections -acceptées ou pas- pour que cette valeur devienne l' index du nouveau socket.
sk est un contrôle Winsock indexé. Pour l'indexer il suffit de définir sa propriété Index à 0, en mode création.
Son évènement DataArrival diffère d'un socket classique en ce sens qu'il reconnait l'index du socket qui envoie un paquet:
Private Sub sk_DataArrival(Index as integer, byval bytestotal as long)
dim s as string
sk(index).getdata s,vbstring
msgbox "client " & index & " dit: " & s
end Sub
Par conséquent, pour que le serveur envoie un message à un seul de ses clients, il n'a qu'à spécifier l' index du client:
sk(4).senddata "client 4, voici mon message"
Et pour envoyer un message à tout le monde, le serveur fait simplement une boucle sur tous les clients connectés.
Ne pas oublier de décharger un socket lorsqu' un client distant se déconnecte:
Private sub sk_Close(Index as integer)
unload sk(index)
msgbox "Client " & index & " déconnecté"
end sub
Ces explications sont relativement indépendantes du langage
et te serviront même si tu programmes des sockets avec un autre langage
de programmation, comme le C.
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 9 févr. 2006 à 10:21
Ca fonctionne selon le principe de client/serveur: un des deux va faire
le serveur en se mettant en attente de connection (avec la méthode
listen). L'autre va se connecter à lui avec la méthode connect(): il
doit connaître l' IP et le port sur lequel le serveur est en écoute.
cs_Blackwars
Messages postés3Date d'inscriptionmardi 24 février 2004StatutMembreDernière intervention14 février 2006 14 févr. 2006 à 11:23
Maintenant je vais demander quelque chose d'un peu plus poussé.
Admettons que je fasse par pur exemple un Pierre-Feuille-Ciseaux Online (xD)
Avec liste des connectés. Est-ce possible d'envoyer des données winsocks à un seul de ces connectés ? (Une fenetre de défi qui s'ouvre que chez un connecté en particulier) si oui, comment ? Merci d'avance.