BASE POUR SERVEUR/CLIENT TCP/IP AVEC NETWORKSTREAM

boutnell Messages postés 22 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 28 avril 2007 - 8 févr. 2005 à 20:23
cs_klapaudius Messages postés 7 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 3 octobre 2009 - 4 oct. 2009 à 02:34
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

cs_klapaudius Messages postés 7 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 3 octobre 2009
4 oct. 2009 à 02:34
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
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 juin 2008 à 15:46
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
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
19 juin 2008 à 14:18
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?
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
19 juin 2008 à 12:30
ok

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

Billou_13
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
19 juin 2008 à 12:00
'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
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 juin 2008 à 11:33
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
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
19 juin 2008 à 10:59
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.
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 juin 2008 à 09:14
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
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
19 juin 2008 à 08:35
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.
damned3 Messages postés 22 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 18 décembre 2007
14 janv. 2008 à 05:56
merci super utile pour comprendre la base
walteau Messages postés 23 Date d'inscription mercredi 21 mai 2003 Statut Membre Dernière intervention 13 janvier 2007
5 nov. 2006 à 01:11
Source très bien commentée c vrai! merci ;)
cs_MATHIS49 Messages postés 368 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 14 mai 2010 1
2 févr. 2006 à 00:19
Bravo, ca marche et c'est tres bien commenté ! 9/10
boutnell Messages postés 22 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 28 avril 2007
8 févr. 2005 à 20:23
bon source:) c ce que je cherchais.. et en plus c bien commenter !
Merci
Rejoignez-nous