有关CSocket在多线程应用中的问题(高分送上)

goldolphin 2003-05-26 03:39:56
问题描述如下:
在Win32 MFC程序中使用CSocket实现阻塞数据报套接字,在主线程中创建并绑定一个套接字。在另一线程中使用该套接字,发送数据包(SendTo)没有问题,但接收(ReceiveFrom)则发生异常。
后将该套接字的创建和使用放在同一线程中,则没有异常,不解。
请各位指点~~~~
...全文
55 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goldolphin 2003-05-28
  • 打赏
  • 举报
回复
FT,结帐
goldolphin 2003-05-27
  • 打赏
  • 举报
回复
事实上,并没有同时在两个线程中用同一个套接字进行收发。
我的意思是
“在另一线程中使用该套接字,发送数据包(SendTo)没有问题,但改为接收(ReceiveFrom)则发生异常。”
“若该套接字的创建和使用(ReceiveFrom)放在同一线程中,则没有异常”
winthegame 2003-05-26
  • 打赏
  • 举报
回复
dizzo(流浪汉) : 楼主不可能是传的对象吧!最最最差也是传指针进去啊。可能是修改了hSocket 的值了...而且楼主也说了,另一线程中使用该套接字,发送数据包(SendTo)没有问题哦。。
dizzo 2003-05-26
  • 打赏
  • 举报
回复
线程之间不能直接传递CSocket对象,要传递句柄。

先CAsyncSocket::Detach(),然后将这个句柄传到线程里,

然后在线程里CAsyncSocket::Attach();

MSDN里面的chat/chatsvr是个很好的例子。
c0der 2003-05-26
  • 打赏
  • 举报
回复
我认为是线程同步问题,请注意共享的数据问题.建议可响应WM_SOCKET_NOTIFY消息从而调用OnReceive() OnSend()等成员函数,可以在它们中调用自己的recv,send,在recv,send后给线程处理数据。
winthegame 2003-05-26
  • 打赏
  • 举报
回复
Debug模式下肯定有About Retry ,ignore 出现啊,用Retry一看,可能多半是因为Socket的句柄为零吧。可能某个语句不小心修改了hSocket的句柄吧。
goldolphin 2003-05-26
  • 打赏
  • 举报
回复
是未处理Win32异常,无法用WSAGetLastError()得到错误信息。系统弹出对话框说在MFC文件sockcore.cpp中有错误~~~~
winthegame 2003-05-26
  • 打赏
  • 举报
回复
接收(ReceiveFrom)则发生异常,那么WSAGetLastError()的描述字是什么啊? 能说说吗?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧