1

私は2部構成の製品を開発しています。1 つの部分は、Windows Embedded Standard を実行するシングル ボード コンピューター上の C# アプリです。もう 1 つは、TCP/IP スタックを備えた RTOS を実行する組み込みデバイスです。2 つのデバイスは、イーサネット ケーブルを介して通信する必要があります。ポイントツーポイント接続です。外部ネットワークには何も接続されていません。

私はネットワーク プログラミングの初心者なので、ベスト プラクティスを探しています。私は、TCP ソケットが最も簡単なアプローチであると仮定しています。コードを書いて道に迷う前に、アドバイスを得られると思いました。

保証されていることの 1 つは、組み込みデバイスが 169.254.1.1 の静的 IP アドレスを維持することです。それは私が知っているすべてです。では、これらの人たちをつなぐために何を知る必要がありますか? サブネットに問題があることは知っていますが、それが私の知識が不足しているところです。クライアント、サーバー、ポート番号などです。

リクエストごとの追加情報: 2 つの端で、非常に単純なバイナリ プロトコルが交換されます。その部分はすでに定義されており、RS-232 リンクで動作しています。しかし、RS-232 ポートはなくなります。基本的に TCP を使用してこの情報を伝送し、さらに再試行やエラー チェックなどの優れた機能をすべて提供したいと考えています。システムのどちらの端でも転送を開始できます。

4

2 に答える 2

2

http://beej.us/guide/bgnetのようなソケットプログラミングの紹介を調べたいと思うかもしれません。

Windows ノードは、rtos デバイスと同じサブネットにネットワーク インターフェイスを構成し、そのサブネットから (異なる) IP アドレスを選択する必要があります。

どのデバイスがサーバーであり、接続を待機するかは、アプリケーションによって異なります。おそらく、2 つのノードの起動順序によっても異なります。たとえば、RTOS デバイスが最初に起動した場合、反対側の準備が整うまで TCP 接続を待機することがあります。

もちろん、tcp ストリーム内に何らかのプロトコルが必要です。TCP が提供する機能が必要ない場合は、UDP もオプションになる可能性があります。これにより、RTOS 側のメモリ フットプリントも削減される可能性があります。

ハードウェアウォッチドッグが注意を払うことなく、両側が互いに独立して再起動(またはクラッシュ:-)できる場合は、接続を再確立できるように、反対側が再起動を認識していることを確認してください(たとえば、tcpキープアライブ機能を使用)。

TCP を使用すると信頼性の高い接続が得られますが、アプリケーションによっては、Nagle アルゴリズムがメッセージの遅延を RS232 セットアップの場合よりも高く維持していることに気付く場合があります。これを回避するには、ソケットで NO_DELAY オプションを使用します。

于 2013-01-05T21:36:30.813 に答える
0

自分で TCP を実行しないことを強くお勧めします。これは素晴らしいことですが、マシン ツー マシン インターフェイスには発見しにくい落とし穴がたくさんあります (例: ナグリング、KA 構成、パケット化ステート マシンのテスト)。

2012 年です。ZeroMQ などを使用できます [より多くの優れた IP メッセージング ライブラリを自由に編集してください]。

于 2013-01-06T13:33:48.173 に答える