2012-04-30 3 views
0

숙제는 서버 지연 추정에 클라이언트를 가져 오는 함수를 작성하는 것입니다. 나는 "시간은 무엇입니까?"라는 요청을 클라이언트로부터 보내야합니다. (getTickCount()에 의해) 서버로부터 50 개의 응답을받는 것보다 - 그리고 평균을 계산하는 것보다. 문제는 어떤 이유로 2 차 recv 함수가 작동을 멈추고 그 이유를 모른다는 것입니다. 이 (내 클라이언트에서) 내 코드의 일부입니다클라이언트 대 서버 지연 추정 - UDP를 통해

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를 사용하고 있기 때문에, 그것의 미러 함수는 더 이해가되어야한다.

또한 단일 수신을 처리하기 전에 50 건의 요청을 보내면 지연이 전혀 좋지 않습니다. 귀하의 평균은 복수의 단일 송수신 쌍으로 계산되어야합니다.

+0

기본적으로 선생님은 우리에게 클라이언트 및 서버의 간단한 예제를 UDP로 제공하여 코드를 따르고 다른 모든 기능은 recv에서 훌륭하게 작동합니다. 어쨌든, 나는 rcvform을 사용하려고했지만 같은 문제가 발생했습니다. 아니요. 예외도 있습니다. comex3.exe의 0x757b6aff에서 첫 번째 예외가 발생했습니다. 0x40010005 : Control-C. 무엇을 의미합니까 ?? – Nusha

관련 문제