C# で簡単なソケット プログラミングを行っています。クライアントコンソールからユーザー名とパスワードを読み取り、資格情報をサーバーに送信し、サーバーから認証ステータスを返すことで、ユーザーを認証しようとしています。基本的なもの。私の質問は、データがサーバーとクライアントの両方が期待する形式であることを確認するにはどうすればよいですか?
たとえば、クライアントでユーザー資格情報を読み取る方法は次のとおりです。
Console.WriteLine("Enter username: ");
string username = Console.ReadLine();
Console.WriteLine("Enter plassword: ");
string password = Console.ReadLine();
StreamWriter clientSocketWriter = new StreamWriter(new NetworkStream(clientSocket));
clientSocketWriter.WriteLine(username + ":" + password);
clientSocketWriter.Flush();
ここでは、クライアント側でユーザー名とパスワードをコロン (またはその他の記号) で区切ります。サーバーでは、「:」をトークンとして使用して文字列を分割するだけです。これは機能しますが、ちょっと... 安全ではないようです。クライアントとサーバー間で共有されるある種の区切りトークンがあるべきではないので、このようにハードコーディングする必要はありませんか?
サーバーの応答についても同様です。認証が成功した場合、クライアントが期待する形式で応答を返すにはどうすればよいですか? 単純に「SUCCESS」または「AuthSuccessful=True/False」という文字列を送信しますか? サーバーがデータを送信する形式をクライアントが認識できるようにするにはどうすればよいですか (クライアントにハードコーディングする以外に)。
私が求めているのは、アプリケーションレベルのプロトコルを設計および実装する方法だと思います。あなたのアプリケーションに特有のものだと思いますが、プログラマーが一般的に使用する典型的なアプローチは何ですか? さらに、どのようにしてフォーマットの一貫性を保っていますか? この件に関する記事へのリンクもいただければ幸いです。