2010-12-13 6 views
-1

J'ai une application client/serveur TCP simple. Comment configurer les deux programmes donc du côté serveur, il faut un nom d'utilisateur et un mot de passe, et quand le client essaie de se connecter, ils doivent entrer le nom d'utilisateur et le mot de passe et l'envoyer au serveur, le serveur vérifiez si c'est le bon nom d'utilisateur et mot de passe, si c'est correct puis il permet la connexion, sinon il rejette la connctionServeur et client TCP/IP C#

Répondre

1

Cela ne peut pas être fait en utilisant simple TCP/IP. Vous devrez soit inventer une sorte de protocole ou utiliser WCF ou similaire. Comme la connexion se produit avant que tout puisse être envoyé, il n'y a aucun moyen d'envoyer des informations d'identification "avec la connexion". Il faut que le client se connecte, reçoive une commande pour "Login", vérifie les informations d'identification et renvoie un identifiant unique qui doit ensuite être envoyé avec chaque commande pour que le serveur puisse vérifier si le client a été authentifié. C'est comme ça que je ferais si la WCF n'était pas une option.

+0

J'ai un contrôle de connexion où l'utilisateur doit taper son nom d'utilisateur et mot de passe, mais le problème est que n'importe qui peut créer un programme pour se connecter à l'adresse IP spécifique avec le port correct. C'est pourquoi je voulais que le côté serveur caille à la place avant d'autoriser la connexion. – user464111

+0

Je sais ce que vous essayez d'obtenir, mais cela ne peut simplement pas être fait en utilisant TCP/IP sans définir un type de protocole sur TCP/IP. Comme je l'ai dit, vous pouvez démarrer une "session" sur le serveur pour chaque client (ce que vous feriez de toute façon pour que le serveur reste réactif). Si le client est authentifié correctement, acceptez et exécutez d'autres commandes mais "Login", sinon, ne le faites pas. Vous pouvez demander au client d'envoyer un jeton que vous fournissez après une connexion réussie, ou demander au serveur de se souvenir des clients authentifiés. –

0

Blanc Thorsten est techniquement correct, je pense toujours qu'il ya une solution:

Que le serveur accepte toutes les connexions, mais attendez-vous alors que les premières données de la connexion le nom d'utilisateur et mot de passe. Si elles sont incorrectes, le serveur fermera alors la connexion et ne traitera aucune des demandes que le client a pu envoyer sur la connexion.

+0

*** scratchhead *** N'est-ce pas l'équivalent de ce que j'ai dit, y compris mes commentaires ci-dessus? –

+0

Pas exactement. Le PO est concerné par l'utilisation de connexions non autorisées. Donc, en soulignant que c'est en fait nom d'utilisateur et mot de passe (plutôt que "credentials"), et en soulignant que vous fermez la connexion lorsque les informations d'identification sont incorrectes, peut être la clé de la compréhension. En outre, je ne vois pas l'intérêt d'utiliser des cookies ici. –

2

Utilisez WCF car vous n'avez évidemment jamais utilisé de sockets pures auparavant. Ce sera probablement une solution plus stable que si vous essayez d'apprendre les sockets et d'inventer votre propre protocole.

Vous pouvez utiliser WCF avec netTcpBinding pour obtenir ce que vous voulez. Vous avez un exemple ici: http://www.dotnetspider.com/resources/19314-Client-server-sample-using-WCF-net-tcp-binding.aspx

Je suis désolé si ce n'était pas la réponse que vous recherchez, mais il y a beaucoup à mettre en œuvre correctement pour obtenir une solution client/serveur tcp/ip sans tracas .