私はLinuxの下でBerkely SOCKET APIを使ってTCPサーバを書いています。クライアントは一連の仕様を持ち、クライアントから送信される各メッセージはこれらの仕様に基づいています。つまり、クライアントから送信されたメッセージは、仕様で指定された多くの構造体の1つに対応します。今、シナリオは、サーバーが、クライアントがいつ何時に送信するメッセージか分からないということです。メッセージが出たら、それが何であるかを知ることができます。クライアントから送信されるメッセージは可変長であるため、どのメッセージを受け取るかを事前に知ることはできません。これを解決するために、私は以下の方法を使用している:私はサイズ4096のデフォルトのバッファを使用しているrecv()sysの呼び出しを正しく使う方法
const char *buf[4096] = { 0 };
if (recv (connected, buf, 4096, 0) == -1)
{
printf ("Error in recvng message\n");
exit (-1);
}
を(クライアントからのメッセージは、このサイズよりも大きくなることはできません)。そのバッファに受信し、その後、私はメッセージの種類を確認し、次のように対応するアクションを取る:これは正常に動作しますが、私はちょうどそれが適切な方法それであるかかもしれない何か他のものがあることを確認したかった
struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
これよりも良い。すべての助けを非常に感謝します。
ありがとうございました。
はいこれは私が恐れるものです。これに解決策を投稿していただけますか? – Abdullah
編集された回答をご覧ください。 –
おかげさまで、多くの方々に感謝しています。喜んでください:) – Abdullah