请教关于CSocket接受数据的问题,如果发送的数据有100K,,那么接受端的程序应该怎么写?? 是很现实的一个问题,那位高人,花点时间帮我解决一下,感激不尽我即使设置足够大的缓冲,也只能收到8640bit,, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不要指望一次收到所有的数据。最好是分次接受,并且将每次接收的数据量垒加。如果最后的接收数据量记数等于要接收的,那么肯定不会错了。如:nTotalReceive=0;do{ nReceive=m_socket.Receive(m_srcBuffer+nTotalReceive,1024); nTotalReceive+=nReceive;}while(nTotalReceive<nTotal && nReceive>0) 循环接收。BOOL CHSPacket::ReadBody(CHSConnection *pConnection){ ASSERT(pConnection); CHSSocket *pSocket = pConnection->GetSocket(); ASSERT(pSocket); if ( m_nLength > 0 && m_PacketStatus >= PS_READHEADEROK ) { if ( m_pData == NULL ) { try { m_pData = new TCHAR[m_nLength]; // 清 0 ZeroMemory(m_pData, m_nLength); m_nBytesRead = 0; m_PacketStatus = PS_READINGBODY; } catch (CMemoryException *e) { e->ReportError(); e->Delete(); return FALSE; } } ASSERT(m_pData); int nBytesRead = pSocket->Receive(m_pData + m_nBytesRead, m_nLength - m_nBytesRead); if ( SOCKET_ERROR == nBytesRead ) { if (WSAEWOULDBLOCK == pSocket->GetLastError()) { // 继续进行接收 pSocket->AsyncSelect( FD_READ ); } return FALSE; } m_nBytesRead += nBytesRead; if ( m_nBytesRead < m_nLength ) { pSocket->AsyncSelect( FD_READ ); return FALSE; } m_PacketStatus = PS_READBODYOK; } return TRUE;} 非常感激还有个问题,socket中的阻塞机制是怎么样的啊, 这个typedef怎么解读 C++里面混乱的字符串操作 求一个完成端口模型中,使用AcceptEx的例子。谢谢。 CSocketFile序列化 为什么这个这个位图不能显示? 在有关TCP的Windows网络编程中如何得到通讯对方的地址??? 麻烦哪位大仙能帮我看看下面的代码哪里错了?vc6.0+opencv1.0 遇到这样的怪事 一个极菜的问题问各位!!VC++6.0下是否可以写C,并编译呢?? MFC数据库中图片的显示 为什么这个工程打不开? 100分,请高手帮忙
最好是分次接受,并且将每次接收的数据量垒加。
如果最后的接收数据量记数等于要接收的,那么肯定不会错了。如:nTotalReceive=0;
do
{
nReceive=m_socket.Receive(m_srcBuffer+nTotalReceive,1024);
nTotalReceive+=nReceive;
}
while(nTotalReceive<nTotal && nReceive>0)
BOOL CHSPacket::ReadBody(CHSConnection *pConnection)
{
ASSERT(pConnection);
CHSSocket *pSocket = pConnection->GetSocket();
ASSERT(pSocket);
if ( m_nLength > 0 && m_PacketStatus >= PS_READHEADEROK )
{
if ( m_pData == NULL )
{
try
{
m_pData = new TCHAR[m_nLength];
// 清 0
ZeroMemory(m_pData, m_nLength); m_nBytesRead = 0;
m_PacketStatus = PS_READINGBODY;
}
catch (CMemoryException *e)
{
e->ReportError();
e->Delete();
return FALSE;
}
} ASSERT(m_pData); int nBytesRead = pSocket->Receive(m_pData + m_nBytesRead, m_nLength - m_nBytesRead);
if ( SOCKET_ERROR == nBytesRead )
{
if (WSAEWOULDBLOCK == pSocket->GetLastError())
{
// 继续进行接收
pSocket->AsyncSelect( FD_READ );
}
return FALSE;
}
m_nBytesRead += nBytesRead;
if ( m_nBytesRead < m_nLength )
{
pSocket->AsyncSelect( FD_READ );
return FALSE;
} m_PacketStatus = PS_READBODYOK;
}
return TRUE;
}