le dialogue réseau se fait d'un client vers un serveur
pour identifier le serveur le client doit connaitre son nom (genre pc_machin) ou son adresse ip (v4 ou v6)
un nom étant résolu en adresse ip (si tout se passe bien ^^)
il faut aussi préciser un port (de 0 à 65k)
il faut aussi choisir un protocole, tcp et udp sont les 2 plus courants (mais il y e en a d'autres, voir des surcouches de protocoles)
udp est une connexion non connecté (désolé ^^)
les paquets (ensemble d'octets) sont envoyé mais ne sont pas garantis d'arriver dans l'ordre, ou même d'arriver
par contre ce protocole est légèrement plus rapide, donc c'est bien pour du streaming, pour du dialogue sérieux on utilise tcp
le principe du tcp c'est que le serveur écoute sur un port puis attend les demandes de connexion
il doit aussi préciser sur quel ip il accepte les connexion, car un pc peut avoir plusieurs adresses ip
un port d'écoute ne peut etre ouvert que par un programme à la fois
le client demande une connexion ver un hôte par son nom/ip + port, le serveur accepte, une fois que c'est fait les 2 peuvent s'envoyer des octets
x clients peuvent se connecter à un serveur, même depuis la même machine
pour faire des tests en local c'est tout à fait possible, un réseau fonctionne aussi en local
comme dit précédemment un pc peut avoir plusieurs ip et c'est souvent le cas (une adresse ipv4 + 1 ipv6 par exemple)
de plus Windows (et surement les autres aussi) ont une adresse dit de loopback qui retombe sur lui même, 127.0.0.1 (et ::1 en ipv6), c'est 2 ips seront résolues par le nom localhost
on peut donc se connecter à sa propre adresse ip soit avec localhost, 127.0.0.1, son ip de réseau local (ipconfig peut te la donner) ou même ::1 si on a activé l'ipv6
concernant .net :
il y a des classes sockets qui gèrent ça (protocoles, connexion, envoie d'octets …)
mais elles sont complexes à utiliser
après en plus haut niveau et orienté TCP il y a tcplistener (côté serveur) et tcpclient (pour une connexion) qui sont beaucoup plus simples mais qui demandent néanmoins de connaitre un peu le réseau, à savoir que qu'un paquet ne peut pas dépasser x ko (8ko par défaut je crois) donc si on envoit plus c'est découpé et le receveur recoit le "message" en plusieurs fois
et que même si ce que veut envoyer ne dépasse pas ca peut etre découpé
sur du socket pur on utilise donc une norme de dialogue qui peut etre "maison", le plus souvent soit une entete de message de taille fixe qui décrit la longueur du message, ou encore un caractère de fin de trame (pour savoir qu'on a reçu un message et qu'on peut maintenant le traiter)
NB : tout peut se transformer en octets, bitconverter.getbytes(..) pour un type simple, system.text.Encoding.x.getbytes(str) pour un string, sérialisation xml ou binaire pour une classe
encore plus haut niveau il y a WCF qui permet de créer des webservices (sur du tcp ou autre), ca peut etre assez chiant à comprendre au début et à mettre en place, mais ca permet de s'affranchir de coder la gestion des messages (découpage, traitement, réponse …)
ici on expose une méthode ou une fonction en .net côté serveur, le client appelle cette méthode en utilisant le code wcf comme il appelerait une méthode locale (avec les éventuels paramètres), wcf s'occupe du transport réseau, et si c'est une fonction le client reçoit la réponse, on a donc pas l'impression de faire du réseau et c'est très pratique
bonne chance ...
Partager