Pour le serveur, tu dois mettre l'adresse ip du serveur et le port sur lequel tu veux écouter.
Pour le client, tu crées le TcpClient sans paramètre et tu indique l'adresse du serveur et le port lorsque tu appels la méthode Connect.
Pour le serveur, tu dois mettre l'adresse ip du serveur et le port sur lequel tu veux écouter.
Pour le client, tu crées le TcpClient sans paramètre et tu indique l'adresse du serveur et le port lorsque tu appels la méthode Connect.
j'ai essaye de mettre mon application sur deux machines différentes, (le serveur sur une machine et le client sur une autre) pour le serveur j'ai mis :
le client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IPHostEntry iphe = Dns.Resolve("localhost"); IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 1069);
bon il m'affiche erreur de connexion, maintenant je ne sais pas comment choisir le numéro port moi je pensais qu'il suffirait qu'il soit le même dans les deux application c'est tout ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 c = new TcpClient("192.168.2.100", 1069); //c'est l'adresse IP de la machine serveur
pour le serveur, le code me parait bon (je suppose que après il y'a le Start et le AcceptTcpClient). Il se peut que ton parfeu te bloque l'accès.
Pour le client le code devrais plutot être ça (si j'e ne me trompe pas) :
Pour le choix des numéros de port, il faut surtout qu'il soit inoccupé et que l'on ai t les droits pour ouvrir une connection dessus (je ne me souviens plus des plages de port).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 var c = new TcpClient(); c.Connect(IPAddress.Parse("192.168.2.100"), 1069);
ben ca ne marche toujours pas apparemment la programmation réseau est beaucoup plus compliquée que ce que je croyais !!!
je crois le problème c'est le numéro de port !
l'erreur qui a été générée est :
voila mais la je ne comprends pas , pour le numéro de port je prends comme ca un numéro au hasard ?! est ce que le serveur et le client doivent utiliser le même numéro de port ?A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 192.168.2.100:1069
j'ai réussi a faire communiquer un client et un serveur qui se localisent sur deux machines différentes, mais j'ai tenté la même chose sur l'emulateur mais ca n'a pas marché ??!!
juste une petit remarque, vu que je veux mettre le client dans le PDA donc je n'ai pas besoin de connaitre son IP parce que je ne vais utiliser que le IP du serveur ?
La plage "interdite" est de 1 à 1024. Pour être sûr que le port est pas déjà utilisé tu peux regarderpour les ports actuellement en service et dans le fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part netstat -apour les port connu pour héberger un service bien connu (80 =>http...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part C:\Windows\System32\drivers\etc\services
Sinon pour exemple, msdn en fournit
http://msdn.microsoft.com/en-us/library/fx6588te.aspx pour le serveur
http://msdn.microsoft.com/en-us/library/bew39x2a.aspx pour le client
A mon avis le code serveur est pas bon, tu l'obliges à utiliser la première adresse ip (ça se peut que c'est une adresse ipv6 ou une carte de bouclage par exemple et donc ca ne marchera pas). Tu vois avoir un truc du genre IPAddress.Any
salut !
finalement t'as raison Arsenic68 le problème est la :
lorsque j'ai essayé d'afficher l'adresse IP, il m'affiche 127.0.0.1 (@de bouclage) comment faire pour récupérer l'adresse IP locale de ma machine attribuée par le DHCP ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 IPHostEntry iphe = Dns.Resolve("localhost"); IPEndPoint ipep = new IPEndPoint(iphe.AddressList[0], 8081); MessageBox.Show(iphe.AddressList[0].ToString()); //pour afficher l'adresse IP
apparemment je peux ne pas préciser l'adresse IP du serveur dans le serveur, c'est a dire je mets directement :
maintenant ce qui me tracasse le plus, c'est fait que des fois ca marche et des fois non surtout lorsque je mets le serveur sur une machine et le client sur une autre ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TcpListener s = new TcpListener(8080); //je précise uniquement le numéro de port
donc j'ai pensé au numéro de port qui est des fois libre et des fois non !? car c'est pas normal dutout que ca marche de fois et des fois non ?!
j'ai deux questions :
1- est ce que le serveur et client doivent utiliser le même numéro de port, si non alors comment le serveur pourra communiquer et récupérer l'information vu qu'il écoute sur un autre port ?
2- comment choisir un numéro de port ?
Pourquoi tu veux à tout pris rendre le service que sur cette adresse? Le plus simple c'est de lui dire d'utiliser 0.0.0.0 et ::1 (l'adresse ANY en C). Le port 8080 est un port de contrôle d'apache (mais aussi de contrôle d'Oracle 10g express).
Le client doit contacter le serveur sur le port bien connu (celui que tu as choisi), mais le port que le client utilisera de son coté sera un port libre au hasard.
Par exemple, tu rends le service sur le port 1234 de l'adresse 192.168.1.13. Le client utilisera ces paramètres. L'adresse du client est sur une de tes cartes (tu peux spécifier laquelle tu veux utiliser) avec un port libre sur cette carte.
Le port que tu choisis dépend de ton envie (tu as 63 Ko de possibilités (64-1)) moins les programmes que tu fais tourné (Oracle = 1521, Web = 80, SMTP = 25)
Client :
Seveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TcpClient c = new TcpClient ("@IP serveur",5020);
est ce que je peux communiquer comme ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TcpListner s= new TcpListener (5000);
peux tu m'expliquer stp comment ca se passe entre ces deux ports ?
Ps: ca n'a pas marché comme ca ! pour que ca marche j'ai du mettre le même numéro dans le TcpListener et le TcpClient ?!
Le client demande un connexion au serveur sur l'adresse du serveur, port du serveur. Pour que le serveur puisse lui répondre (la partie ipSource:portSource), il prend un port libre sur la carte la plus appropriée.Client :
Seveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TcpClient c = new TcpClient ("@IP serveur","portDuServeur");
Code : Sélectionner tout - Visualiser dans une fenêtre à part TcpListner s= new TcpListener ("portDuServeur");
Le serveur fabrique sa réponse et l'envoie sur l'ex couple source et met son ipSource:portSource en tant que couple Destination afin que le client puisse lui répondre de nouveau
etc...
Et si c'est plus simple avec un schéma :
merci pour tes explications,
pour ce port du serveur ? je peux prendre n'importe quelle valeur, au hasard, il faut juste éviter une valeur entre 0 et 1023 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TcpClient c = new TcpClient ("@IP serveur","portDuServeur");
Pour le port du client en au aucun cas je n'en aurai besoin non ? vu que lorsque le client se connecte a un serveur ils vont tous les deux lire et écrire a partir d'un même flux, donc une fois le connexion est établie, un flux est créé entre les deux donc ils vont se communiquer a travers ce flux ? donc en fait je n'aurai besoin que du port du serveur pour établir la connexion entre les deux en suite le tout sera dans le flux ? "je parle du coté programmation" car je sais pour qu'il puisse communiquer il faut connaitre le port utilisé par le client.
portDuServeur tu dois utiliser le même que celui que tu as définis coté serveur 12348 dans mon exemple.
Et oui tu ne tapes pas dans les 1024 premières valeurs (si jamais tu compiles et exécute sur Linux hors mode root il t'enverra sur les roses).
Et oui aussi niveau programmation, tu n'as pas besoin de savoir quelle est l'adresse et le port du client à moins que tu fasse une filtration.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager