帮忙给看一下代码,SOCKET的
基于UDP的一方给另一方发送字节,总共有m_size个,每次发送m_data个。代码如下:
char buf[1024*500];
memset(buf, 'a ',sizeof(buf));
int nTotal = 0;
//int nEvery = m_data;
int nLeftData = m_size;
int ret = 0;
while(nTotal < m_size)
{
if( (nLeftData) < m_data )
{
ret = sendto(m_sock,buf,nLeftData,0,(SOCKADDR*)&m_addr,sizeof(SOCKADDR));
}
else
ret = sendto(m_sock,buf,m_data,0,(SOCKADDR*)&m_addr,sizeof(SOCKADDR));
if(ret == SOCKET_ERROR)
{
break;
}
nTotal += ret;
nLeftData = m_size - ret;
//SetDlgItemInt(IDC_EDIT_SIZE,nLeftData);
if(nTotal == m_size)
break;
Sleep(m_interval);
}
AfxMessageBox( "发送完毕! ");
当m_size不是m_data的整数倍时,总是多发出了字节,请帮忙看看吧,头疼了。。。
[解决办法]
char buf[1024*500];
memset(buf, 'a ',sizeof(buf));
//int nTotal = 0; !!!!!!!!!!这个是多余的,将m_size大小全部发完就可以
//int nEvery = m_data;
int nLeftData = m_size;
int ret = 0;
while(1) //不停的发送就可以
{
if( nLeftData < m_data )
{
ret = sendto(m_sock,buf,nLeftData,0,(SOCKADDR*)&m_addr,sizeof(SOCKADDR));
}
else
ret = sendto(m_sock,buf,m_data,0,(SOCKADDR*)&m_addr,sizeof(SOCKADDR));
if(ret == SOCKET_ERROR)
{
break;
}
nLeftData = nLeftData - ret;
if(nLeftData == 0)
break;
}