私は、画像のような大きなデータ(そして最終的にはオーディオストリームか何か、それは当面の目標ではありませんが)を必要とするプログラムと、ホスト - >クライアントを送信するための小さな命令を書いています。現在、これを単純な TCP クライアント サーバー アプリケーションとして記述できます。ただし、これは、画像が送信されるたびに、非常に迅速に送信される可能性のあるかなり重要な小さな命令を含め、他のデータが転送されないことを意味します. サーバーと各クライアントの間に複数のソケットを作成することでこれを修正できますが、実際には 1 つのソケット (したがって 1 つのポートが使用される) に保持することをお勧めします。複数のデータストリームを同時に送信するために使用できるプロトコルまたは何かがありますか (または、少なくとも何らかの形で織り交ぜられているのでしょうか?)。任意の提案をいただければ幸いです。
1 に答える
この2つを分離することを強くお勧めします。これは、他の多くのプロトコル(FTPなど)で使用されている方法です。
あなたが本当にそれらを組み合わせたいのなら、あなたはそうすることができますが、私はそうするための標準的なツールを知りません。どのバイトがどのストリームから来たかをクライアント側で知るための何らかの方法が必要になることに注意してください。制御命令が来ていることをクライアントに示すために、データストリームを送信するために、ある種のエスケープシーケンスを発明する必要があるでしょう。もちろん、そのエスケープシーケンスはデータ内で自然に発生する可能性があるため、データも適切にエンコードする必要があります。
編集:別のアプローチは、データをフレーム化することです。完了したら、DATA STARTコマンド、次に1024バイトのデータ、次にその他のコマンド、次にDATA CONTINUEコマンド、次の1024バイト、次にDATA ENDコマンドを送信します(もちろん、DATA START / CONTINUE / ENDです)。あなたが発明したいくつかのプロトコルでコマンドを作りました)。
時間に余裕があり、学習に興味がある場合は、取り組むのは興味深い問題ですが、急いでいる場合は、複数のソケットを使用するよりも遅いアプローチになる可能性があります。いつでも最初に制御メッセージをクライアントに送信し、クライアントにサーバーへのデータ接続を開かせることができます。これにより、クライアント側とサーバー側で1つのポートを開くだけで済み、ファイアウォールの問題を単純化できることがよくあります。