Net.Sockets.Socket クラスを使用して TCP サーバーを記述します。TCP はストリーム上で動作するため、メッセージを互いに分離するアプローチが必要です。(詳細については、こちらのブログで Stephen Cleary のメッセージ フレーミングの投稿を参照してください。)
私が達成したいのは、カスタム メッセージ フレーミング プロトコルをサポートする TCP サーバー クラスを作成することです。このクラスの初期化の例は次のとおりです。
var receiveDelimiter = Encoding.UTF8.GetBytes("[END]");
var sendDelimiter = Encoding.UTF8.GetBytes("\r\n");
var protocol = new DelimiterFramingProtocol(receiveDelimiter, sendDelimiter);
var server = new Server(protocol);
server.Start(port);
プロトコルは抽象クラス MessageFramingProtocol から派生する必要があり、サーバーはそれを使用してメッセージを分離できる必要があります。上記の例では、サーバーは区切り文字 ("[END]") が受信された場合にのみ DataReceived イベントを発生させ、DataReceived の引数には区切り文字の前にあるメッセージの部分のみを含める必要があります。デリミタの後にさらにバイトが受信された場合、サーバーはそれらを保存し、デリミタが再度受信されたときにのみ DataReceived を起動する必要があります。サーバーは、送信するすべてのメッセージの後に sendDelimiter も送信する必要があります。
私が必要としているのは、このサーバー クラス全体でも、プロトコル クラスでもありません。必要なのは、テンプレート、デザインのアドバイスです。サーバー クラスに Protocol という名前の FramingProtocol タイプのプロパティがあると仮定すると、Server クラスで操作を送受信するときにそれを使用するにはどうすればよいでしょうか? 上記の柔軟性を提供するために必要な抽象メソッド/プロパティは何ですか? FramingProtocol から派生するカスタム プロトコル クラスを記述できるはずです。区切り文字、長さのプレフィックス、それらの両方、またはその他のカスタム アプローチを使用して、メッセージを区切ることができます。