2012-04-30 6 views
0

私の宿題は、クライアントからサーバーへの遅延推定を行う関数を書くことです。 私はクライアントから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; 
     } 
+0

コメントの '100'は入力ミスであると想定できますか? –

+0

多くの文脈が欠落しています。あなたが短い、完全なプログラムを提供できるなら、それは最高でしょう。 http://sscce.org/を参照してください。それに失敗すると、「墜落した」というのはどういう意味ですか? TCPまたはUDP接続ですか? 'bytesSent'と' bytesRecv'はrespの後にどのような値をとりますか?システムコール? 'recvBuff'はどのように宣言されていますか? –

+1

あなたは 'recvfrom()'を使ってはいけませんか?これはUDPの権利ですか? – noMAD

答えて

0

あなたがのrecvfromに切り替えてみましたか?あなたがsendtoを使っているので、その鏡の機能はもっと理にかなっているはずです。

また、1回の受信を処理する前に50回のリクエストを送信した場合、遅延はうまくいかないでしょう。あなたの平均は複数の単一の送信/受信ペアで計算されるべきです

+0

基本的に私の先生はUDPでクライアントとサーバーの簡単な例を教えてくれたので、彼のコードに従いました。私の他のすべての関数はrecvでうまくいきます。とにかく、私はrcvformを使用しようとしましたが、同じ問題を抱えています。 いいえ私も例外があります - comex3.exeの0x757b6affでの初回例外:0x40010005:Control-C。 それはどういう意味ですか? – Nusha