Winsockでの受信量取得
Posted: 2009年1月13日(火) 02:35
夜遅くに申し訳ありません。
クライアントはDXライブラリ、サーバーはWinsock+コンソールにて通信プログラムを組んでいるのですが
実際に受信する前にきているパケットの量を得ることはできますでしょうか?
データタイプ毎に受信する量が異なるので、あらかじめ来ているデータ量を取得し、
recvにてそのデータ量分受信したいです。
// 受信
int DataLength;
DataLength = 来ているデータ量を得る
recv(sock, buff, DataLength, 0);
// データタイプ
enum DATA_TYPE
{
Type_A,
Type_B,
}
struct PacketHead
{
DATA_TYPE type;
char Data[256];
}
struct Type_A_Data
{
int a;
int b;
}
struct Type_B_Data
{
char msg[256];
}
それとも、データの頭2byteにデータタイプを入れておき、
受信 recv(socket, buff, RECV_MAX, 0) 、
その後頭2byteで判別したデータサイズを抜き取り処理、の方がよいのでしょうか?
個人的には上記の構造体を用いた方法を利用したいのですが・・・
極力通信に使うデータ量をへらしたいのです。
また、データタイプの判別に他になにか良い手があれば
お教えいただけるとありがたいです。
クライアントはDXライブラリ、サーバーはWinsock+コンソールにて通信プログラムを組んでいるのですが
実際に受信する前にきているパケットの量を得ることはできますでしょうか?
データタイプ毎に受信する量が異なるので、あらかじめ来ているデータ量を取得し、
recvにてそのデータ量分受信したいです。
// 受信
int DataLength;
DataLength = 来ているデータ量を得る
recv(sock, buff, DataLength, 0);
// データタイプ
enum DATA_TYPE
{
Type_A,
Type_B,
}
struct PacketHead
{
DATA_TYPE type;
char Data[256];
}
struct Type_A_Data
{
int a;
int b;
}
struct Type_B_Data
{
char msg[256];
}
それとも、データの頭2byteにデータタイプを入れておき、
受信 recv(socket, buff, RECV_MAX, 0) 、
その後頭2byteで判別したデータサイズを抜き取り処理、の方がよいのでしょうか?
個人的には上記の構造体を用いた方法を利用したいのですが・・・
極力通信に使うデータ量をへらしたいのです。
また、データタイプの判別に他になにか良い手があれば
お教えいただけるとありがたいです。