私の宿題は、クライアントからサーバーへの遅延推定を行う関数を書くことです。 私はクライアントから50の要求を送る必要があります "時間は何ですか?" (getTickCount()による)サーバーからの50の応答を受け取ることよりも、平均を計算するよりも。 問題は何らかの理由で2番目のrecv関数がクラッシュしていて、なぜその理由がわからないということです。 これは(私のクライアントから)自分のコードの一部です:クライアントからサーバーまでの遅延見積もり-
WSAData wsaData;
if (NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData))
{
cout<<"Time Client: Error at WSAStartup()\n";
}
SOCKET connSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == connSocket)
{
cout<<"Time Client: Error at socket(): "<<WSAGetLastError()<<endl;
WSACleanup();
return;
}
sockaddr_in server;
sockaddr serverr;
int server_len = sizeof(server);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(TIME_PORT);
int bytesSent = 0;
int bytesRecv = 0;
string sendBuff;
char recvBuff[255];
for (i=0 ; i<50;++i)
{
bytesSent = sendto(connSocket,sendBuff.c_str() , (int)strlen(sendBuff.c_str()), 0, (const sockaddr *)&server, sizeof(server));
if (SOCKET_ERROR == bytesSent)
{
cout<<"Time Client: Error at sendto(): "<<WSAGetLastError()<<endl;
closesocket(connSocket);
WSACleanup();
return;
}
}
for (i=0 ; i<50;++i)
{
bytesRecv = recv(connSocket, recvBuff, 255, 0);
if (SOCKET_ERROR == bytesRecv)
{
cout<<"Time Client: Error at recv(): "<<WSAGetLastError()<<endl;
closesocket(connSocket);
WSACleanup();
return;
}
コメントの '100'は入力ミスであると想定できますか? –
多くの文脈が欠落しています。あなたが短い、完全なプログラムを提供できるなら、それは最高でしょう。 http://sscce.org/を参照してください。それに失敗すると、「墜落した」というのはどういう意味ですか? TCPまたはUDP接続ですか? 'bytesSent'と' bytesRecv'はrespの後にどのような値をとりますか?システムコール? 'recvBuff'はどのように宣言されていますか? –
あなたは 'recvfrom()'を使ってはいけませんか?これはUDPの権利ですか? – noMAD