私は現在、データグラム(udp)パケットを処理するcプログラムをいくつかのより高いレベルの言語に移植しようとしています。パケットは可変サイズである可能性があるので、それらのサイズを示す整数で始まります。 cでは、MSG_PEEKフラグを指定してrecvを呼び出し、最初にこの値だけを受け取ってからフィッティングバッファを割り当て、残りのパケットを読み込みます。コード(簡体字)はこのように書きます:高級言語のデータグラムパケットを覗くことは可能ですか?
// Simplified message format.
struct message {
int length;
char[] text;
}
struct message *m = malloc (sizeof(int));
// Read out in just length.
recv (sock, m, sizeof(int), MSG_WAITALL | MSG_PEEK);
int txtlen = ntohl (m->length) * sizeof(char);
int msglen = sizeof(int) + txtlen;
// Read complete packet.
m = realloc (m, msglen);
read (sock, m, msglen);
m->text[txtlen] = '\0';
// Show result.
printf("%s\n", &m->text);
私は巨大なバッファを確保するために、一見、共通の練習を避けたいと何ら大きなパケットが到着しないことを願っています。データグラムを覗いたり、pythonやjavaなどの高水準言語で可能な限り完全な長さを事前に決定するようなことはありますか?
UDPパケットは「巨大」にすることはできません(例:http://stackoverflow.com/questions/1098897/what-is-the-largest-safe-udp-packet-size-on-the-internet)。あなたはこれについて心配するべきですか? – Mat
*非常に限られたリソースを持つ組み込みシステムでない限り、間違いなく.. –