私はwinsockを使用してC++で小さなクライアント/サーバーアプリケーションを作成していますが、何が起こっているのか説明できません.. 私は2つの基本機能をTCPコネクション..Winsockは追加のデータを送信します
bool sending(SOCKET source, char* buff, int size, int flags = 0)
{
int sent = 0;
int totalst = 0;
int total = size;
while(totalst != total)
{
sent = send(source, buff+totalst, size-totalst, flags);
if(sent > 0)
{
totalst += sent;
}
if(sent == SOCKET_ERROR)
{
return false;
}
}
return true;
}
bool receive(SOCKET source, char* buff, int size, int flags = 0)
{
int rec = 0;
int totalrc = 0;
int total = size;
while(totalrc != total)
{
rec = recv(source, buff+totalrc, size-totalrc, flags);
if(rec > 0)
{
totalrc += rec;
}
if(rec == SOCKET_ERROR)
{
return false;
}
}
return true;
}
サーバーがそれに続くデータブロックのサイズを含む整数を送信し、私の場合のデータブロックのこのサイズは変更しないでください..それは常に92600でなければなりませんクライアントが92604バイトを受信することがあります。奇妙なことは、それは、クライアントが間違った値を受け取ること
int i=0;
while(i < 100)
{
i++;
dat = getData();
len = sizeof(dat);
sending(source, (char*)&len, sizeof(len));
sending(source, dat, len);
Sleep(200);
}
..私はボックサイズと(スリープ付き)ブロック自体を送信した後、サーバーを待機させる場合、それは常に私が期待するものを送信していることであるハチができます遅れのためにバイトの? これを修正する方法はありますか? ご協力いただければ幸いです!
あなたはすでに回答を受け入れています。しかし、私はちょうどtoddaが話していることの結果としてあなたが見ているものに関連している可能性が高いあなたのコードの2つのバグを指摘しました。下の私の答えを見てください。 – selbie
ありがとうございます!ありがとうございました。コメントは既に指摘していますが、すぐ後に削除しました。私は質問を更新するのを忘れました。! – elephantintheroom