2017-11-10 6 views
1

私はC言語のソケットプログラミングを学んでいますが、問題なくサーバとクライアントがメッセージをやりとりしていますが、それが受け取るはずのたくさんのバイト。割り当ての一部は、チェックサムを含むヘッダーを作成することです。このヘッダーは、number_of_bytes_sent%32のバイナリー形式でなければなりません。ヘッダーを作成して送信するサーバーがありますが、どのように私はその情報から受け取るはずのバイト数を得ることができます。サーバからデータを取得するときにどれだけ受信するかを知っている

答えて

2

両サイドにバッファリングする必要があります(放射と受信)。依頼と返信がどのように整理されるかについては、の規約を持っている必要があります。アプリケーションレベルでは、あなたのプロトコルは、応答または要求(より一般的にはアプリケーションメッセージ)がどこで開始および終了しているかを知る必要があります。例についてはHTTPSMTPを調べてください。

TCPソケットは、メッセージ境界なしののストリームだけであることを覚えておいてください。

したがって、クライアントは1キロバイトの1つのフラグメントの単一メッセージを正常に受信し、サーバーはrecvそれぞれ512バイトの2つのフラグメントになります。逆も起こり得る。断片化はランダムなので再現性はありません。

ルーター - おそらくWifiのものは、TCP/IPパケットを断片化できます(場合によってはそれらを連結して断片化することもできます)。

0mqのようなライブラリがあります(また、free softwareなので、ソースコードを調べる必要があります)。 HTTPライブラリ(クライアント側のlibcurl、サーバ側のlibonion)も見てください。

自分でソケットを実装する場合は、poll(2)socket(7)(およびtcp(7)unix(7))を読んでください。

私は私はおそらくあなたがあなたのアプリケーションプロトコルを定義するように求められ

を受け取ることになってるバイト数を取得することができます方法についての困惑ビットです。次に、アプリケーションのヘッダーにメッセージ(またはコンテンツ)の長さを入れることができます。 Content-length:の属性はHTTP headersになっています。

+0

非常に助かりました、ありがとう! – Telanore

関連する問題