Les pros du réseau

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Les pros du réseau

Message par venom »

Bonjour a tous,

Voilà cette nuit, une question m'a trotté dans la tête. (Même si la nuit sert a dormir)

J'avais codé il y a longtemps un petit Tchat en Purebasic.(envoi de texte)
Ce dernier fonctionner bien. Le seul hic, c'est que j'ai créer 2 exe. Un serveur, et un client. (Normal me direz vous)

Le client distant entrée l'IP ou était lancer l'exe serveur et avec le bon port ouvert, la connexion s'effectuer a merveille.

Ma réel question est :
Comment font les "soft pro" pour que le serveur s'exécute a distance.

Prennons l'exemple de MSN (pour les vieux du forum et resté dans le thème) :lol:
J'imagine que nous avons tous des clients qui se connecte a un serveur ? Mais pourtant il est impossible de lancer un exe sur un serveur ? Question de sécurité.
Si quelqu'un a la réponse à ma question. Ou un bon tuto qui explique le fonctionnement ? Car en Purebasic il est facile de créer un serveur/client mais via 2 exe. :? Ou faut t'il laisser un pc constamment allumé avec l'exe serveur dessus ?

Et je ne parle pas des jeux vidéo. (Genre pong, tic tac toe...) Ou là c'est une autre histoire.

Même si c'est plus cette partie là qui m'intéresse. Un simple Tchat c'est facile on envoie du texte en FTP et ça peut le faire. Mais des choix dans un jeu comment ça se gere ?

D'avance merci.






@++
Dernière modification par venom le jeu. 01/août/2019 15:56, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Les pros du réseau

Message par venom »

Voici 2 petits codes pas trop optimisé, réécrit pour l'occasion. ça permet d'envoyer du texte entre un serveur et un client :
Bien-sur, pour que la connexion s'effectue a distance, vous devez cote serveur ouvrir votre port TCP. Dans l'exemple, il s'agit du port 6842

Pour ceux qui souhaitent tester en local, mettez comme adresse ip cote client 127.0.0.1 :wink:

Coté serveur

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- gadgets Constants
Enumeration
  #Server
  #Editor_0
  #String_0
  #Button_0
EndEnumeration


pseudo$ = InputRequester("pseudo", "choisissez un pseudo", "Serveur")


If InitNetwork() = 0
  MessageRequester("Erreur", "Impossible d'initialiser le réseau !", 0)
  End
EndIf

Port = 6842 ; <--- port a ouvrir sur votre routeur en TCP
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(#Server, Port) = 0
MessageRequester("Erreur", "Impossible de crée le serveur !", 0)
  End
EndIf
MessageRequester("Serveur", "Serveur créé ( Port : "+Str(Port)+" TCP )", 0)




  
  If OpenWindow(#Window_0, 0, 0, 330, 280, "Serveur", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
   EditorGadget(#Editor_0, 10, 10, 310, 230, #PB_Editor_ReadOnly)
   StringGadget(#String_0, 10, 250, 220, 20, "")
   ButtonGadget(#Button_0, 240, 250, 80, 20, "Envoyer")
  EndIf 

  Repeat
   SEvent = NetworkServerEvent()
    If SEvent
     ClientID = EventClient()
      Select SEvent
      
        Case #PB_NetworkEvent_Connect ; verifie si un client se connecte
         AddGadgetItem(#Editor_0, -1, "un client c'est connecter !!!", 0, 0)
  
        Case #PB_NetworkEvent_Data ; verifie si un client envoie un message
         length = ReceiveNetworkData(ClientID, *Buffer, 1000)
          AddGadgetItem(#Editor_0, -1, PeekS(*Buffer, length, #PB_UTF8), 0, 0)
  
        Case #PB_NetworkEvent_Disconnect ; verifie si un client se déconnecte 
         AddGadgetItem(#Editor_0, -1, "un client c'est déconnecter !!!", 0, 0)

      EndSelect
    EndIf

    
    
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
          
        Case #Button_0 ; on appuie sur le button envoyer
         SendNetworkString(ClientID, pseudo$+" : "+GetGadgetText(#String_0), #PB_UTF8) ; on envoie le message au client
          AddGadgetItem(#Editor_0, -1, pseudo$+" : "+GetGadgetText(#String_0), 0, 0) ; on affiche le message dans l'editor
         SetGadgetText(#String_0, "") ; on vide le string

      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
 CloseNetworkServer(#Server)
Coté client

Code : Tout sélectionner

;- Window Constants
Enumeration
  #Window_0
EndEnumeration

;- gadgets Constants
Enumeration
  #Server
  #Editor_0
  #String_0
  #Button_0
EndEnumeration


pseudo$ = InputRequester("pseudo", "choisissez un pseudo", "Client")


If InitNetwork() = 0
  MessageRequester("Erreur", "Impossible d'initialiser le réseau !", 0)
  End
EndIf


IP$ = InputRequester("Information", "Entrez l'adresse IP du serveur :", "",0)
Port = 6842 ; <--- port a ouvrir sur votre routeur en TCP
*Buffer = AllocateMemory(1000)


ConnectionID = OpenNetworkConnection(IP$, Port)
If ConnectionID = 0
MessageRequester("Erreur", "Impossible de se connecter au serveur !", 0)
  End
EndIf 





  If OpenWindow(#Window_0, 0, 0, 330, 280, "Client", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
   EditorGadget(#Editor_0, 10, 10, 310, 230, #PB_Editor_ReadOnly)
   StringGadget(#String_0, 10, 250, 220, 20, "")
   ButtonGadget(#Button_0, 240, 250, 80, 20, "Envoyer")
   
   AddGadgetItem(#Editor_0, -1, "connexion avec le serveur réussi !!!", 0, 0)
  EndIf 

  Repeat
   SEvent = NetworkClientEvent(ConnectionID) 
    If SEvent
     Select SEvent

      Case #PB_NetworkEvent_Data ; verifie si le serveur envoie un message
       length = ReceiveNetworkData(ConnectionID , *Buffer, 1000)
        AddGadgetItem(#Editor_0, -1, PeekS(*Buffer, length, #PB_UTF8), 0, 0)

      Case #PB_NetworkEvent_Disconnect ; verifie si le serveur se deconnecte
       AddGadgetItem(#Editor_0, -1, "le serveur c'est déconnecter !!!", 0, 0)
        CloseNetworkConnection(ConnectionID)

     EndSelect
    EndIf
    
    
    
   EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
          
        Case #Button_0 ; on appuie sur le button envoyer
         SendNetworkString(ConnectionID, pseudo$+" : "+GetGadgetText(#String_0), #PB_UTF8) ; on envoie le message au serveur
          AddGadgetItem(#Editor_0, -1, pseudo$+" : "+GetGadgetText(#String_0), 0, 0) ; on affiche le message dans l'editor
         SetGadgetText(#String_0, "") ; on vide le string

      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
CloseNetworkConnection(ConnectionID)





@++
Dernière modification par venom le ven. 02/août/2019 11:40, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Les pros du réseau

Message par TazNormand »

Salut Venom,

tu as répondu toi-même à ta question : le serveur et son logiciel "serveur" tourne en permanence.

MSN, les BBS (pour les très vieux du forum :lol: ), iRC etc... tous fonctionnent de la même manière, il faut un serveur pour établir les liaisons entre les clients.

Falsam hébergeait son tchat sur un serveur "web", il pourrait mieux t'en parler que moi.

Je ne vais sans doute pas t'apprendre qu'aujourd'hui, un serveur physique (= une machine) héberge x serveurs virtuels (Hyper-V, VmWare, ...) Tu peux faire la même chose avec un PC pas trop vieux et VirtualBox : ton PC te sert de serveur multimédia par exemple, et tu fais tourner VirtualBox dessus pour ton tchat uniquement, les 2 sont cloisonnés donc pas d'interactions malencontreuse de l'un sur l'autre, si ce n'est la panne physique qui coupe TOUT :x

Voilà
Image
Image
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Les pros du réseau

Message par Zorro »

oui, j'ai perso une copie de mon site sur mon NC10 (en attendant d'avoir un NAS)
si je veux que les gens aillent sur mon site qui est sur mon NC10 (pour virer un jour totalement Free.fr)
et bien il faut que mon NC10 tourne en permanence 24/24 7/7 !!

comme un NAS ;) (NAs qui est un petit ordinateur sans clavier sans ecran, qui tourne 24h/24 ....et qui ne consome quasi rien quelques Watt .... :)


a savoir que ton serveur a la maison depends de ta connection

par exemple pour mon ADSL j'ai entre 6 et 8 mega/s en Download , et 0.750 mega/s en upload ...

lorsque les gens se connectaient a la maison sur mon NC10 , ils recuperaient donc les pages a 0.750 ..... (si je ne me sert pas moi meme de ma connection )
ce qui est plus rapide qu'un BBS ou un RTC , mais moins rapide que chez Free :)

l'ideal pour un serveur a la maison, c'est d'avoir la fibre (la vraie fibre ;) (chez orange) )

la fibre SFR :
SFR peut présenter des abonnements "fibre" alors qu'il utilise juste le réseau cablé de numéricable qui donne un débit nettement inférieur à la fibre optique.



Les abonnés ont bien une box fibre mais pas la fibre au bout de la box.

lire ici : https://www.latribune.fr/technos-medias ... 59781.html


ps: certain ordinateur (carte mere) propose une option de "Wake up" ce qui permet a la carte mere de démarrer
sur requete du reseau ... mais le temps de démarrage peut etre super long ... a moins d'un besoin spécifique
c'est pas terrible ! ...
le démarrage se configure dans le Bios de la carte mere, ensuite ça doit etre automatique
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Les pros du réseau

Message par Marc56 »

Mais pourtant il est impossible de lancer un exe sur un serveur
Si, mais pas depuis l’extérieur du réseau local sur lequel se trouve le serveur.
laisser un pc constamment allumé avec l'exe serveur dessus
Oui, c'est le principe des applications client/serveur. À noter qu'un même serveur peut "discuter" avec plusieurs clients, grâce aux sockets. C'est le même principe qu'en radio: un canal d'appel et un canal de dégagement, sauf que c'est le système d'exploitation qui gère. Le client appelle toujours sur le même port, appelé port d'écoute de l'application serveur.
Un simple Tchat c'est facile on envoie du texte en FTP et ça peut le faire
Non, FTP c'est pour transférer des fichiers, pas des phrases.
SFR peut présenter des abonnements "fibre" alors qu'il utilise juste le réseau cablé de numéricable qui donne un débit nettement inférieur à la fibre optique.
Cet article à 3 ans 1/2. SFR est passé en fibre presque partout (dans les grandes villes). Différence entre SFR et Orange et Free, c'est que pour SFR, la liaison rue/maison ou colonne montante/appartement reste en cuivre (ce qui pour les quelques mètres qui reste ne change pas grand chose). Voir FFTH, FFTB pour les détails techniques.

:wink:
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Les pros du réseau

Message par venom »

Ah ok,

Merci des réponses (que je connaissais déjà en fait)
Je pensais qu'en 2019 il y avait d'autres techniques pour relier 2 clients a un Tchat ou jeu qu'un exe 24/24 et 7/7. :lol:

@Dobro
Oui j'ai eu un NAS ça fonctionne plutôt bien mais il était sur une connexion en carton. Comme tu dit. (C'est mieux relié a la fibre)

@Marc56
Oui pour le FTP je sais que ce protocole sert a envoyé du fichier. Mais rien empêche d'envoyer un fichier texte a chaque requête entre le serveur et le client. (Même si je suis d'accord. C'est pas fait pour ça :wink: )






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Les pros du réseau

Message par Marc56 »

Mais rien empêche d'envoyer un fichier texte a chaque requête entre le serveur et le client
Oui, mais comment gérer la réponse du serveur au client ? :D
À moins d'un sombre bricolage à base de ReceiveFTPFile() sur un fichier convenu d'avance:
  • Le serveur attend un fichier
  • Le serveur analyse le contenu du fichier
  • Le serveur créé un fichier de réponse
  • Le client envoi des ReceiveFTPFile() jusqu'à ce que le fichier réponse soit présent
Sans oublier qu'il faut alors faire tourner un serveur FTP et donner des droits en écriture au client (donc vérifier les écritures)
:roll: :wink:
Dernière modification par Marc56 le ven. 02/août/2019 9:56, modifié 1 fois.
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Les pros du réseau

Message par venom »

Ba y'a pas :lol: le FTP sert de transit entre 2 clients qui discutent ensemble :lol:
Fin bref. Je cherche la petite bête la. C'est pas fait pour on est d'accord.






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Les pros du réseau

Message par venom »

Mais je pensais à quelque chose concernant le NAS.(boîtier tout en 1)

Ce dernier est fonctionnel via linux (comme quasiment tous les serveurs). Et je sais que sur mon NAS, il n'était pas possible de lancer un exe car il n'y avait pas de Windows a l'intérieur. Certe pour héberger du HTML PHP etc... Ça fonctionne bien. Mais pour laisser tourner un exe en permanence, il faut forcément un ordi sous windows allumé H24 ?

Après, je ne suis pas un pro des réseaux. C'est peut être possible via un NAS :lol: D'où mes questions.

Pour réduire niveau taille, il faudrait genre un raspberry aujourd'hui ?






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Les pros du réseau

Message par djes »

Tu mélanges plusieurs choses. D'abord les programmes exécutables existent sur tous les OS. Un tel programme est un fichier contenant du code compilé (sur Windows on dit souvent «un exe» par abus de langage, le programme exécutable ayant en général une extension .exe). Tu peux créer un programme exécutable avec PB sur Linux, Mac ou PC. Ce seront des fichiers différents.

Ensuite un programme serveur (ou parfois service) est donc un programme, compilé ou non, qui tourne en permanence et reçoit des requêtes généralement transmises par l'OS et qui viennent du réseau. S'il les comprend, il y répond. Parfois, il peut faire appel à un autre programme pour y répondre. C'est le principe des CGI.

Le serveur est, là aussi par abus de langage, l'ordinateur sur lequel tourne le programme serveur avec lequel le programme client communique. Ça peut être le même ordinateur ou non, et des OS différents. Il faut juste qu'ils parlent la même langue : le protocole.

Enfin il est tout à fait possible de faire exécuter un programme sur le serveur si on a un programme serveur qui offre cette possibilité et qui a le droit de le faire. Certains programmes serveurs (par exemple apache chez les hébergeurs pro) permettent de limiter ce droit par configuration et sont eux-mêmes limités par l'OS.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Les pros du réseau

Message par Marc56 »

@venom

Un NAS est juste un périphérique de stockage réseau (Network Attached Storage)
On leur ajoute souvent des tas de fonctions qui peuvent donc en faire un serveur WEB, FTP, HTTP etc
Les plus connus sont de marque ‎Synology qui fait donc du prêt à l'usage avec interface de gestion graphique (via réseau), mais c'est toujours la même chose: Une mini carte système et un ou des disques durs.

Tu peux te faire un NAS pour 35€ avec une simple carte Raspberry sur laquelle tu mets une carte MiniSD de taille suffisante pour contenir l'OS (linux) et tes programmes et données.
Consommation: moins de 5W soit 30 à 100x- qu'un PC sans écran.
Tu peux lui ajouter ensuite d'autres disques (USB, clé USB), clavier, écran etc.

:!: Cependant, les Raspberry ont des CPU ARM, donc pas de programmes PB dessus. Mais OK pour Python, Perl, C etc
Répondre