关于完成端口连续发送丢包的问题
现象:
1.每次连续发送128byte的包,接受方却只能够收到第一个包
send(data,128);
send(data,128);
send(data,128);
2.间隔延迟足够的时间,接受方收到大包
send(data,128);
Sleep(1000);
send(data,128);
Sleep(1000);
send(data,128);
Sleep(1000);
3.发送语句片断
bool CIocpModeSvr::SendMsg(SOCKET sClient,const char * pData,unsigned long Length)
{
if(sClient==INVALID_SOCKET || pData==NULL || Length==0 || !IsStart)return false;
//申请操作键
PPER_IO_OPERATION_DATA PerIoData=(PPER_IO_OPERATION_DATA) \
GlobalAlloc(GPTR,
sizeof(PER_IO_OPERATION_DATA));
//准备缓冲
unsigned long Flag=0;
DWORD SendByte;
ZeroMemory(&(PerIoData->OverLapped),sizeof(OVERLAPPED));
memcpy(PerIoData->SendBuf,pData,Length);
PerIoData->SendDataBuf.buf=PerIoData->SendBuf;
PerIoData->SendDataBuf.len=Length;
PerIoData->OperType=SEND_POSTED;
int bRet=WSASend(sClient,
&(PerIoData->SendDataBuf),
1,
&SendByte,
Flag,
&(PerIoData->OverLapped),
NULL);
if(bRet==SOCKET_ERROR && GetLastError()!=WSA_IO_PENDING)
{
char LogStr[256];
_snprintf(LogStr,256,"WSASend With Error : %d",GetLastError());
WriteLogString(LogStr);
return false;
}
else return true;
return false;
}
想请教一下原因,以及解决方案