异步套结字进行文件传送,发送方发送了122个包,而接收方才接收到36个包。
我指的包,是我自定义的一个结构体。
发送方循环发送,122个包全都发完了,正好是一个文件的大小。
接收方通过OnRecive函数响应消息进行接收,怎么丢失了这么多包呢?
有没有高人帮忙看看啊?
我先帖个原代码:我自定义的包结构如下:
typedef struct
{
int iCode; 
long iOther;
char chString[128];
char chContext[ATM_CONTEXT_SIZE];}SNETPACK, *LPNETPACK;发送方:
int CNetSub::TransportFile(const char *pFileName)
{
int iRet = -1; CString _strFileName;
_strFileName.Format("%s", pFileName); int iSize = 0;
CFile file;
if (file.Open(_strFileName, CFile::modeRead | CFile::typeBinary))
{
while (iSize < file.GetLength())
{
//m_sSendPack就是自定义的一个包
strcpy(m_sSendPack.chString, TRANSPORT_EVENT_STRING);
m_sSendPack.iCode = TRANSPORT_EVENT_CODE;
m_sSendPack.iOther = file.GetLength();
int iLen = file.Read(m_sSendPack.chContext, ATM_CONTEXT_SIZE);
iSize += iLen;
this->SendPack(&m_sSendPack, ATM_PACK_SIZE);

file.Close();
}
return iRet;
}-----------------------------
int CNetSub::SendPack(const void *lpbuf, int size, int uflag)
{
int iRet = this->Send(lpbuf, size, uflag);
while (iRet == WSAEWOULDBLOCK)
{
TRACE("ATM_Safe SendPack() WSAE Would block!\n");
Sleep(100);
iRet = this->Send(lpbuf, size, uflag);
}
LPNETPACK pTmp = (LPNETPACK)lpbuf;
TRACE("Total file length - %d, send length %d\n", pTmp->iOther, strlen(pTmp->chContext));
return iRet;
}××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
接收方:
void CClientSocket::OnReceive(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base class int iErr = this->Receive(&m_sRecvPack, ATM_PACK_SIZE);
if ((SOCKET_ERROR == iErr) && (WSAEWOULDBLOCK != iErr))
{
this->Close();
}
else
{
if (m_sRecvPack.iCode > 0)
this->WorkWithPack(m_sRecvPack); //根据不同的iCode码执行对应指令
} //CAsyncSocket::OnReceive(nErrorCode);
}------------------------------
int CClientSocket::Receive(void* lpBuf, int nBufLen, int nFlags) 
{
// TODO: Add your specialized code here and/or call the base class
int iErr = 0; iErr = CAsyncSocket::Receive(lpBuf, nBufLen);
TRACE("ServerAtm Receive() !\n");
return iErr;
// return CAsyncSocket::Receive(lpBuf, nBufLen, nFlags);
}