LinuxでBerkelySOCKETAPIを使用してTCPサーバーを作成中です。これで、クライアントには一連の仕様があり、クライアントによって送信される各メッセージはそれらの仕様に基づいています。つまり、クライアントから送信されるメッセージは、仕様で指定された多くの構造体の1つに対応します。ここでのシナリオは、サーバーがクライアントがいつ送信するメッセージを認識していないというものです。メッセージを受け取ったら、それが何であるかを理解できますが、その前には理解できません。クライアントから送信されるメッセージの長さは可変であるため、どのメッセージを受け取るかを事前に知ることはできません。これを解決するために、私は次の方法を使用しました。
const char *buf[4096] = { 0 };
if ( recv (connected, buf, 4096, 0) == -1)
{
printf ("Error in recvng message\n");
exit (-1);
}
つまり、サイズ4096のデフォルトのバッファを使用します(クライアントからのメッセージがこのサイズより大きくなることはありません)。そのバッファで受信し、その後、メッセージタイプを確認して、次のように対応するアクションを実行します。
struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
これは問題なく機能しますが、それが適切な方法であるか、これよりも優れている可能性がある他の方法があるかを確認したかっただけです。すべてが大いに感謝するのに役立ちます。
ありがとう。