我的作業是編寫函數,讓客戶端到服務器延遲估計。 我需要從客戶端發送50個「什麼時候?」的請求。而不是從服務器接收50個響應(通過getTickCount()) - 而不是計算平均值。 問題是,由於某種原因,第二個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;
}
我們可以假設評論中的「100」是一個錯字嗎? –
我們錯過了很多上下文。如果你能提供一個簡短的,完整的程序,那將是最好的。請參閱http://sscce.org/。否則,你的意思是「墜毀」?連接是TCP還是UDP? 'bytesSent'和'bytesRecv'在resp之後有什麼值。系統調用?如何聲明'recvBuff'? –
你不應該使用'recvfrom()'?這是UDP的權利? – noMAD