[Résolu]Network - Refuser un client ?
[Résolu]Network - Refuser un client ?
Salut,
Encore des questions sur le réseau.
Si je démarre un serveur, et que j'attends qu'un client se connecte ... pour faire un jeu à 2 joueurs, par exemple, qu'est-ce que je fais si un 2ème client se pointe ?
Le serveur peut-il refuser une connexion ?
Au premier #PB_NetworkEvent_Connect : je donne un ticket ? Je compte et je filtre ?
Au deuxième #PB_NetworkEvent_Connect : je lui dis quoi ?
Si je CloseNetworkServer(0) : on ferme le bar, tout le monde dehors.
Alors, comment vous faites ?
Encore des questions sur le réseau.
Si je démarre un serveur, et que j'attends qu'un client se connecte ... pour faire un jeu à 2 joueurs, par exemple, qu'est-ce que je fais si un 2ème client se pointe ?
Le serveur peut-il refuser une connexion ?
Au premier #PB_NetworkEvent_Connect : je donne un ticket ? Je compte et je filtre ?
Au deuxième #PB_NetworkEvent_Connect : je lui dis quoi ?
Si je CloseNetworkServer(0) : on ferme le bar, tout le monde dehors.
Alors, comment vous faites ?
Dernière modification par kerkael le dim. 26/avr./2009 22:56, modifié 1 fois.
Bonjour
Personnelement j'utilise un tableau dans lequel je stock les données des client qui se co et que je veu gerer ainsi si je veu ignorer un client je le vire ou je ne l'inscris pas dans le tableau et lors des reception de paquet, ces paquet ne sont pas gerer.
Apres tu peu rajouter un truc tout simple c'est que quand un client se co, si il y a deja deux client sa lui envoie un paquet pour lui dire de ce déconecter.
j'essayerais de retrouver quelque exemple simple des test réseau que j'avais fait.
Si tu as d'autre question hésite pas
++
Scaraber
Personnelement j'utilise un tableau dans lequel je stock les données des client qui se co et que je veu gerer ainsi si je veu ignorer un client je le vire ou je ne l'inscris pas dans le tableau et lors des reception de paquet, ces paquet ne sont pas gerer.
Apres tu peu rajouter un truc tout simple c'est que quand un client se co, si il y a deja deux client sa lui envoie un paquet pour lui dire de ce déconecter.
j'essayerais de retrouver quelque exemple simple des test réseau que j'avais fait.
Si tu as d'autre question hésite pas

++
Scaraber
- Le psychopathe
- Messages : 764
- Inscription : jeu. 03/mars/2005 19:23
Re: Network - Refuser un client ?
C'est simple, dans ton client tu fais une instruction qui a pour but de stoper la connection.kerkael a écrit :Salut,
Encore des questions sur le réseau.
Si je démarre un serveur, et que j'attends qu'un client se connecte ... pour faire un jeu à 2 joueurs, par exemple, qu'est-ce que je fais si un 2ème client se pointe ?
Le serveur peut-il refuser une connexion ?
Au premier #PB_NetworkEvent_Connect : je donne un ticket ? Je compte et je filtre ?
Au deuxième #PB_NetworkEvent_Connect : je lui dis quoi ?
Si je CloseNetworkServer(0) : on ferme le bar, tout le monde dehors.
Alors, comment vous faites ?
Le serveur envoie : KICK
Le client reçoit KICK
SI Message = KICK
ALors FINCONNECTION
FINSI
Même chose pour le ban, tu le gêre dans ton client ban 1h, par rapport a l'heure système. Comme ça cela n'envoie pas des requêtes inutiles sur ton serveur.
Si tu as vraiment besoin d'aide, je te code un truc, j'insiste sur le vraiment car je suis en plein devoir de BTS

Merci pour les coups de pouce. Et merci pour la proposition d'aide, mais j'en suis encore à dessiner les grandes lignes. Si je bute sur un point précis, je demanderai des précisions.
Le kick, et le ban c'est pas mal. Mais quand on diffuse une telle appli, on informe les utilisateurs quel port ils doivent ouvrir pour utiliser l'appli. Sans être parano, est-ce que cette information n'est pas en soit une fenêtre ouverte aux agresseurs ?
Comment m'assurer que le connecté est bien celui qu'il prétend être ? Je m'assure que dans le code Client se trouve une clef que le serveur reconnait, et réciproquement ?
D'ailleurs, j'imagine que je ne vais pas coder un client ET un serveur, mais une appli qui contient les 2 fonctions, vu que c'est pour un jeu. Ensuite à l'un des joueurs de se proposer comme hébergeur de la partie.
Mais j'ai vu des messages qui parlaient de faire héberger le partie serveur sur un serveur et de diffuser le client, d'où ma question sur les connexions en masse.
Bon, je lis, je cherche ... mais j'ai pas trouvé ici-bas un code qui correspondrait au début de ma démarche, alors je vais faire mes propres tentatives d'abord.
Merci
Le kick, et le ban c'est pas mal. Mais quand on diffuse une telle appli, on informe les utilisateurs quel port ils doivent ouvrir pour utiliser l'appli. Sans être parano, est-ce que cette information n'est pas en soit une fenêtre ouverte aux agresseurs ?
Comment m'assurer que le connecté est bien celui qu'il prétend être ? Je m'assure que dans le code Client se trouve une clef que le serveur reconnait, et réciproquement ?
D'ailleurs, j'imagine que je ne vais pas coder un client ET un serveur, mais une appli qui contient les 2 fonctions, vu que c'est pour un jeu. Ensuite à l'un des joueurs de se proposer comme hébergeur de la partie.
Mais j'ai vu des messages qui parlaient de faire héberger le partie serveur sur un serveur et de diffuser le client, d'où ma question sur les connexions en masse.
Bon, je lis, je cherche ... mais j'ai pas trouvé ici-bas un code qui correspondrait au début de ma démarche, alors je vais faire mes propres tentatives d'abord.
Merci
Si je fais un client ET un serveu ... tu veux dire sous 2 exécutables distincts ? Et depuis le client, si je choisi d'héberger la session ça lance localement l'exécutable du serveur, c'est ça ?scaraber a écrit :que le client puisse lancer le serv
Et en spécifiant les paramètres, ça donne plus de contrôle si les utilisateurs communiquent par ailleurs (chat, phone ...) pour s'indiquer quels ports ouvrir sur le firewall.
Au fait, j'ai dupliqué mon code client et j'ai tenté 2 connexions vers le serveur, et c'est le même clientID qui est apparu ...
Bon, vu que c'est la même machine qui a lancé les 2 clients, je comprends, mais d'où vient cet ID ?
Ah, tiens, au temps pour moi, j'avais du me tromper en vérifiant la première fois. J'ai bien deux clientID différents. dsl.
Sinon le numéro de port de connexion du client est lui aussi unique par client, j'imagine, mais à quoi correspond-il ? Il n'est pas nécessaire de lui donner d'ouverture firewall, apparemment. Comment l'exploiter ?
Sinon le numéro de port de connexion du client est lui aussi unique par client, j'imagine, mais à quoi correspond-il ? Il n'est pas nécessaire de lui donner d'ouverture firewall, apparemment. Comment l'exploiter ?
;
; ------------------------------------------------------------
;
; PureBasic - Network (Server) example file
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
If initnetwork () = 0
messagerequester ( "Error Server" , "Network impossible à utiliser!" , 0)
End
EndIf
Port = 6998
*Buffer = allocatememory (1000)
If createnetworkserver (0, Port, #PB_Network_TCP )
messagerequester ( "Server" , "Server lancé (Port " + str (Port)+ ")." , 0)
Repeat
SEvent = networkserverevent ()
If SEvent
ClientID = eventclient ()
ClientIP = getclientip (ClientID)
ClientPort= getclientport (ClientID)
Select SEvent
Case #PB_NetworkEvent_Connect
messagerequester ( "Server" , "Client n° : " + str (ClientID)+ ", Port : " + str (ClientPort)+ " vient de se connecter sous IP: " + str (ClientIP), 0)
Case #PB_NetworkEvent_Data
messagerequester ( "Server" , "Le Client " + str (ClientID)+ " a envoyé un paquet !" , 0)
receivenetworkdata (ClientID, *Buffer, 1000)
messagerequester ( "Server" , "Paquet reçu: " + peeks (*Buffer), 0)
Reponse= messagerequester ( "Server" , "Répondre au client ?" , #PB_MessageRequester_YesNo )
If reponse= #PB_MessageRequester_Yes
sendnetworkstring (ClientID, "Message bien reçu" )
Quit = 1
EndIf
Case #PB_NetworkEvent_File
messagerequester ( "Server" , "Client " + str (ClientID)+ " a envoyé un fichier !" , 0)
receivenetworkfile (ClientID, "C:\TEST_Network.ftp3" )
Case #PB_NetworkEvent_Disconnect
messagerequester ( "Server" , "Client " + str (ClientID)+ " déconnecté..." , 0)
Quit = 1
EndSelect
EndIf
Until Quit = 1
messagerequester ( "Server" , "Fermer le serveur." , 0)
closenetworkserver (0)
Else
messagerequester ( "Error" , "Server impossible à démarrer." , 0)
EndIf
End
Le port du client > tu t'en ocupe pas le firewall demandera peut etre pour le programme mais pas pour le port. Utilise seulement le clientid du coté de ton serveur pour identifié les client.
Je te conseil de stocker les donnée des client dans un tableau avec une scructure de ce type
et dés qu'un client se connecte ou déconecte tu redimentionne le tableau etc.
Je te conseil de stocker les donnée des client dans un tableau avec une scructure de ce type
Code : Tout sélectionner
Structure Client
id.l ;ClientId
ip.l;Ip du client
; et apres toutes les donnée que ta besoin (pseudo.s,positionX.l PositionY.l) etc
EndStructure