recv接收数据的问题,在线等。急!!!
我写的服务程序是发现当接受大约6000字节的时候,接收需要10ms。而当发送60字节的时候需要200ms,不知道为什么?急!!
服务端和客户端分别运行在两台机器上,会出现上述情况,若运行在同一台机器上则不会出现上述情况。
发送和接受都是每次发送512字节,接收时也是每次接收512字节。直到接收完成为止。
以下是接收的代码
接收代码如下:
int sockRecvData(unsigned int& Sock,char* precvbuf,long Data_Length)
{
int rval=0;
SOCKET sock=(SOCKET)(Sock);
char receivebuf[NORMALBUFFERSIZE];//接收数据的缓存
long Data_Count = 0;//收到的数据总量
int recvBuf_Length = 0;//单次收到的数据量
WSAEVENT event = ::WSACreateEvent();
::WSAEventSelect(sock, event,FD_READ);
long recvstarttime=GetTickCount();
int nRet = ::WaitForSingleObject(event, WAIT_FOR_RECV_TIME);//5*1000);
if(nRet == WSA_WAIT_TIMEOUT)// 定时显式状态信息
{
printf("----ERROR:Wait For Recv Data TimeOut----\n");
rval=-4;//等待超时
}
else
{
while(1)
{
memset(receivebuf,0,sizeof(receivebuf));
int recvLength=(Data_Length-Data_Count)<NORMALBUFFERSIZE ?(Data_Length-Data_Count):NORMALBUFFERSIZE;
recvBuf_Length = recv(sock,receivebuf,recvLength,0);//接收一次数据
if(recvBuf_Length==-1)//-1,网络错误
{
int err=WSAGetLastError();
if(err==10035||err==6)
{
Sleep(5);
printf("dddddddddddddddddd\n");
continue;
}
else
{
Data_Count=-1;
break;
}
}
if(recvBuf_Length>0)
{
memcpy(&precvbuf[Data_Count],receivebuf,recvBuf_Length);//将每次收到的数据放到recvBuf中
Data_Count+=recvBuf_Length;
}//把单次收到的数据长度累加
if(recvBuf_Length==0)
{
int closeerr=WSAGetLastError();
if(Data_Count!=Data_Length)
Data_Count=-1;
break;
}
if(Data_Count == Data_Length)//收到的数据总长度等于要接收的数据总长度,跳出
break;
}
}
WSACloseEvent(event);
long recvendtime=GetTickCount();
printf("recv data used time %d\n",recvendtime-recvstarttime);
return Data_Count;
}
发送时先发送个包头,然后发送内容。
结果发现当接收内容时若发送的字节数为60则会在int nRet = ::WaitForSingleObject(event, WAIT_FOR_RECV_TIME);//5*1000);
等待大约200ms,若发送的字节数为6000则只会等待10ms不知道为什么?
盼高手答复