首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

帮忙给看一下代码,SOCKET的,该怎么解决

2012-03-03 
帮忙给看一下代码,SOCKET的基于UDP的一方给另一方发送字节,总共有m_size个,每次发送m_data个。代码如下:cha

帮忙给看一下代码,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;
}

热点排行