BASE POUR SERVEUR/CLIENT TCP/IP AVEC NETWORKSTREAM

Signaler
Messages postés
22
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
28 avril 2007
-
Messages postés
7
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
3 octobre 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29296-base-pour-serveur-client-tcp-ip-avec-networkstream

Messages postés
7
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
3 octobre 2009

Voila exactement ce que je cherchais. Je suis débutant en C# et tous ces commentaires sont vraiment d'une grande aide. Merci beaucoup 10/10
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
Il semblerait que ce soit la raison : http://msdn.microsoft.com/fr-fr/library/system.net.ipendpoint(VS.80).aspx (This page is specific to
Microsoft Visual Studio 2005/.NET Framework 2.0)

Pour le framework 1.1, je ne vois pas et je n'ai pas Visual Studio 2003 sur mon poste.

Billou_13
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

Je suis sous le framework 1.1,
et la msdn me dis que Client est "Propriétés protégées".

est ce que mon erreur peut venir de la?
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

ok

Merci pour tout.
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
Je comprends pas, chez moi, ca marche très bien.
Je ne vois pas ce qui clôche. Désolé

Billou_13
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

'System.Net.Sockets.TcpClient.Client' est inaccessible en raison de son niveau de protection

Voila le message d'erreur que j'obtiens avec:

TCP_Client = TCP_Serveur.AcceptTcpClient();
IPAddress address = ((IPEndPoint)TCP_Client.Client.RemoteEndPoint).Address;

Si tu peux encore m'aider, ca serai vraiment super.

MERCI
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
Dans ce cas, tu peux faire un fichier d'association "Adresse IP"-"Serveur". Un fichier texte peut faire l'affaire (ou xml à la limite: en utilisant les fichiers Settings, ca peut être classe ^^). Ainsi, ton appli serveur pourra identifier les connections.

Pour connaitre l'adresse IP de la personne qui se connecte, j'ai trop eu le temps de voir mais je pense que j'ai une piste:
- Après la ligne:
TCP_Client = TCP_Serveur.AcceptTcpClient();
- Ajoute la ligne:
IPAddress address = ((IPEndPoint)TCP_Client.Client.RemoteEndPoint).Address;
Tu auras alors accès à l'adresse IP dans l'objet "address".

Voila,

Bonne journée,

Billou
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

Merci de ton aide.
Mais je pense que j'aurai du expliquer mon application pour commencer.

Il s'agit d'un PC qui fait office de serveur (qui ne doit jamais se deconnecter en theorie :)
Et d'une dizaine d'automate sur le meme reseau qui ont une adresse IP chacun et qui se deconnecte reconnecte tres souvent (du a l'electronique).

Le serveur doit pouvoir lire tous les message des clients, et pouvoir envoyer un message de correction a un client en particulier, celui qui n'est pas en phase par exemple.

C'est pour cela que je pensais donner l'ip de client comme numero_client. Plutot qu'un increment.

Et je ne sais pas comment obtenir l'Adresse du client avant le creation du nouveau client.
exemple:
Client Client_Temp = new Client(IP_Client,NetworkStream);

Je sais pas si tu vois bien ou est mon probleme.
Mais je debute en c#, et en reseau, alors meme pour moi c'est encore confus.
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
Bonjour,

Tout d'abord, merci pour le (et j'en profite pour dire merci à tous les commentaires) commentaire.

Pour la reconnection d'un client, tu peux très bien conserver le lien adresse IP - Login en utilisant la classe Dictionnary<TKey, TValue>. Ainsi, tu pourras lui ré-attribuer le login à sa reconnection.
Cependant, il y a plusieurs hics (ce qui explique pourquoi la plupart des gens ne font pas comme ça ^^):
1) Tu pouvais avant connecter un même poste plusieurs fois sur le chat sans aucun souci. Aujourd'hui, ils auront le même login: pas cool !
2) Le dictionnary grandit à l'infini (il faut donc un time-out) pour le purger de temps en temps. Et là, ca complique les choses.
3) Quand tu redémarre ton serveur, tu perds toutes les infos.

C'est pour cela que :
- Soit tu demandes le login souhaité à la connection (et tu vérifies qu'il n'existe pas déjà).
- Soit tu créé un système de "login/mot de passe" que tu garderas côté serveur (dans une base de données, un fichier, ...).

Bonne journée,


Billou_13
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008

Merci pour ce code bien commenter. Mais malgres ca il me reste un petit probleme.
Dans mon application, lorsqu'un client se deconnecte, puis se reconnecte. J'ai besoin de savoir que c'est le meme client (via son IP). Or la a la reconnection il va le nommer evec un nouvel increment.
Je ne trouve pas de solution a mon probleme. Si quelqu'un peu m'aider ce serai super.
Messages postés
22
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
18 décembre 2007

merci super utile pour comprendre la base
Messages postés
24
Date d'inscription
mercredi 21 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2007

Source très bien commentée c vrai! merci ;)
Messages postés
370
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
14 mai 2010

Bravo, ca marche et c'est tres bien commenté ! 9/10
Messages postés
22
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
28 avril 2007

bon source:) c ce que je cherchais.. et en plus c bien commenter !
Merci