问题描述如下:
    在Win32 MFC程序中使用CSocket实现阻塞数据报套接字,在主线程中创建并绑定一个套接字。在另一线程中使用该套接字,发送数据包(SendTo)没有问题,但接收(ReceiveFrom)则发生异常。
    后将该套接字的创建和使用放在同一线程中,则没有异常,不解。
    请各位指点~~~~

解决方案 »

  1.   

    接收(ReceiveFrom)则发生异常,那么WSAGetLastError()的描述字是什么啊? 能说说吗?
      

  2.   

    是未处理Win32异常,无法用WSAGetLastError()得到错误信息。系统弹出对话框说在MFC文件sockcore.cpp中有错误~~~~
      

  3.   

    Debug模式下肯定有About Retry ,ignore 出现啊,用Retry一看,可能多半是因为Socket的句柄为零吧。可能某个语句不小心修改了hSocket的句柄吧。
      

  4.   

    我认为是线程同步问题,请注意共享的数据问题.建议可响应WM_SOCKET_NOTIFY消息从而调用OnReceive() OnSend()等成员函数,可以在它们中调用自己的recv,send,在recv,send后给线程处理数据。
      

  5.   

    线程之间不能直接传递CSocket对象,要传递句柄。先CAsyncSocket::Detach(),然后将这个句柄传到线程里,然后在线程里CAsyncSocket::Attach();MSDN里面的chat/chatsvr是个很好的例子。
      

  6.   

    dizzo(流浪汉) : 楼主不可能是传的对象吧!最最最差也是传指针进去啊。可能是修改了hSocket 的值了...而且楼主也说了,另一线程中使用该套接字,发送数据包(SendTo)没有问题哦。。
      

  7.   

    事实上,并没有同时在两个线程中用同一个套接字进行收发。
    我的意思是
    “在另一线程中使用该套接字,发送数据包(SendTo)没有问题,但改为接收(ReceiveFrom)则发生异常。”
    “若该套接字的创建和使用(ReceiveFrom)放在同一线程中,则没有异常”