void CTestCSocketDlg::OnButton1() 
{

CSocket sockSend;
char szSend[20]="Send data"; sockSend.Create();
int iSend=sockSend.SendTo(szSend,10,5801,"127.0.0.1",0);

AfxMessageBox("No Block");
}
CSocket是阻塞的,这是很多书上说的,为什么上面阻塞呢???还是现实对话框 AfxMessageBox("No Block");多谢了。

解决方案 »

  1.   

    晕。
    一进来就看到LZ的帖子了。
    权你先下载个别人的最简单的例子在你机器上编译运行下试试,看看是不是一样的。
    我以前也遇到过类似的问题,结果是我的机器中毒了,我把winsock修复下就好了。
      

  2.   

    上一个帖子可能就和你说过你要判断返回值的int iSend=sockSend.SendTo(szSend,10,5801,"127.0.0.1",0); if(iSend <= 0)
    {
        if(GetLastError() == EWOULDBLOCK)
               AfxMessageBox("No Block"); 
    }
      

  3.   

    int iSend=sockSend.SendTo(szSend,10,5801,"127.0.0.1",0); 
    这句SendTo执行完毕了。
    注意:阻塞的意思是:SendTo函数必须执行完返回后,才接着执行下面的代码
    你的SendTo函数执行完了,但是失败的。
    SendTo/Send函数并不是想Accept和Receive那样,一直停着等待数据的到来
      

  4.   

    sendto()函数是发送数据报的,只要数据能发送出去,不管对方能不能收到,该函数都会返回。
      

  5.   

    楼主不能光看网上说什么,你至少要明白什么是阻塞、为什么要阻塞,阻塞是多少时间首先:阻塞并不是不返回,而是只是延迟一会返回,你这种测试代码它永远会报告No Block,因为无论是否阻塞,最终都会调用AfxMessageBox去其次:一个函数是否阻塞,是要看到底是不是需要阻塞。如果你发送缓冲区里啥都没有,为什么要阻塞?通过这种方法学习,对基本原理啥都不关心,只能是瞎学,啥都学不好的