プログラミングそのものの話ではないんですが、c#で他の機械とソケット通信してデータやり取りしてこちらからの指示やその応答でなんらかの処理を行うプログラムはどう作るのが一般的なのでしょう?

通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
通信相手はIOTのマイコンのようなもので独自のプロトコルがTCP/IP上で規定されています。

通信プログラムと業務用のアプリのデータのやり取りはファイルとしてデータを保存するのも手ではあるのですが、読み書き遅いので、共有メモリ的な使い方とかメッセージ的な使い方にならないかな、と。
linux上でc言語ばかり使っているので、どうするのが一般的なのかよく分かっておりません。

よろしくお願いします。