2010-12-13 17 views
-1

私は単純なTCPクライアント/サーバーアプリケーションを持っています。 2つのプログラムを設定するには、サーバー側でユーザー名とパスワードが必要です。クライアントが接続しようとすると、正しいユーザー名とパスワードを入力してサーバー側に送信する必要があります。正しいユーザー名とパスワードが正しい場合は接続が許可されているかどうかを確認します。そうでなければ接続を拒否します。C#TCP/IPサーバーとクライアント

答えて

1

これは単純なTCP/IPを使用して行うことはできません。あなたは何らかのプロトコルを発明したり、WCFなどを使用したりする必要があります。

何かが送信される前に「接続」が行われるため、「接続と共に」資格情報を送信する方法はありません。クライアントに接続し、「ログイン」コマンドを受け取り、資格情報を確認し、クライアントが認証されているかどうかをサーバーが確認できるように、すべてのコマンドと共に送信する必要がある一意の識別子を戻す必要があります。 WCFが選択肢でないなら、それは私がやる方法です。

+0

私はユーザーがユーザー名とパスワードを入力する必要があるログインコントロールを持っていますが、誰もが正しいポートで特定のIPアドレスに接続するプログラムを作ることができ、接続してしまうという問題があります。なぜ、私は接続を許可する前にサーバ側をchckしたいのですか? – user464111

+0

私はあなたが達成しようとしていることを知っていますが、TCP/IPを使って何らかのプロトコルを定義しなくても、私が言ったように、あなたは各クライアントのためにサーバー上で「セッション」を開始することができます(これは、サーバーを応答し続けるためにとにかく行います)。クライアントが正しく認証されている場合は、「ログイン」以外のコマンドを受け入れて実行します。それ以外の場合は実行しないでください。ログインに成功した後にクライアントが提供するトークンを送信させるか、サーバーが認証済みのクライアントを「覚えている」ようにすることができます。 –

0

ホワイトトルステンが、私はまだ解決策があると思い、技術的に正しいです:

は、サーバーがすべての接続を受け入れましょうが、その後、接続ユーザー名とパスワードの最初のデータとして期待しています。それらが正しくない場合、サーバーは接続を閉じ、クライアントが接続で送信した可能性のある要求を処理しません。

+0

*** scratchhead ***私の上記のコメントを含め、私が言ったことと同等ではありませんか? –

+0

正確ではありません。 OPは、不正な接続の使用に関係しています。実際にはユーザー名とパスワード(「資格情報」ではなく)であることを指摘し、資格情報が正しくないときに接続を閉じることを指摘することは、理解の鍵となる可能性があります。さらに、私はここでクッキーを使用する点を見失わない。 –

2

純粋なソケットを使用していないため、WCFを使用してください。あなたがソケットを学び、独自のプロトコルを発明しようとすると、おそらくもっと安定した解決策になるでしょう。

netTcpBindingと一緒にWCFを使用して、必要なものを実現できます。 http://www.dotnetspider.com/resources/19314-Client-server-sample-using-WCF-net-tcp-binding.aspx

これはあなたが探して答えなかった場合、私は申し訳ありませんが、しかし、手間のかからない、TCP/IPクライアント/サーバソリューションを得るために正しく実装する必要がたくさんある:あなたはここに例を得ました。

関連する問題