请教:不同线程间如何操作同一个Socket

sayno 2003-07-09 05:56:29
诸位老大:
我有一个Socket链接(主线程中一个CSocket对象),需要在另一个独立的线程中关闭(或重新连接),但在线程中总是异常(向外发送是正常的,Close和Connect异常),请教了一位老大,他说线程中的映射表是独立的,找不到另一个线程中的Socket句柄和window句柄,但如果我在子线程中创建该CSocket对象,在主线程中又无法操作,请教诸位,这个问题应如何解决?以下是示例代码:

...
CSocket sockTest;
UINT SockClose(LPVOID lParam);
void CTestDlg::OnSocktest()
{
if(sockTest.Create()!=0)
{
if(sockTest.Connect("xxx.xxx.xxx.xxx",5000))
Sleep(10);
}

AfxBeginThread(SockClose,(LPVOID)NULL);
}
UINT SockClose(LPVOID lParam)
{
...
Sleep(1000) ;
sockTest.Close();

...
return 0;
}
...全文
44 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sayno 2003-08-06
  • 打赏
  • 举报
回复
Tomzhao(TomZhao) : 例程大体如此

...
CSocket sockTest;

void CTestDlg::OnSocktest()
{
if(sockTest.Create()!=0)
{
...
SOCKET tmpSocket = sockTest.Detach();

AfxBeginThread(ReConnect,(LPVOID) &tmpSocket);
...
}
...

}

UINT ReConnect(LPVOID lParam) //链接维护
{
SOCKET * ptmpSocket = (SOCKET *)lParam;
CSock sockThread;
if(sockThread.Attach(* ptmpSocket))
{
...
//sock操作
...
}

return 0;
}

以上是示例,但如我前文所述,使用静态连编mfc库的Release版本有异常,如您在使用中能解决这一问题也请告知。

又:我在VC/MFC 进程/线程 子论坛提了个同名问题,有位高手在其中阐述了线程间传递CWnd指针可能引起的问题,如有兴趣请去看看
cpluser 2003-08-05
  • 打赏
  • 举报
回复
推荐用socke API
Tomzhao 2003-08-05
  • 打赏
  • 举报
回复
能发一个例程给我吗,我也在郁闷呀,和你问题差不多.
ISAKEEPER 2003-08-04
  • 打赏
  • 举报
回复
up
lsw0794 2003-08-03
  • 打赏
  • 举报
回复
gz
jvcit 2003-07-14
  • 打赏
  • 举报
回复
关注!
sayno 2003-07-14
  • 打赏
  • 举报
回复
还有一个问题:
我按Detach()...Attch()方式,虽然解决了问题,但在编译release 版本时如果使用 “Use MFC in a static Library” 方式,则程序在Attch()时会出现异常,而如果动态使用MFC 库则一切正常,请问这个问题应如何解决?
xtuzi 2003-07-10
  • 打赏
  • 举报
回复
用socke API没有问题,不推荐用CSocket和CAsyncSocket,跨线程是不安全的
sayno 2003-07-10
  • 打赏
  • 举报
回复

谢谢(token_lys对了)!可以了!
先在主线程里Detch 再在子线程里Attach,AfxSocketInit()子线程里可以不做
HeavenS 2003-07-09
  • 打赏
  • 举报
回复
不要用CSocket,微软声明跨越线程使用CSocket和CAsyncSocket是不安全的。

如果希望实现这种功能,就直接用socket api变成,用参数跨线程传递socket句柄,
绝对行! 我曾经作过。
OLIVERY 2003-07-09
  • 打赏
  • 举报
回复
用消息实现内部进程通信就可以达到你的目的了。也就是IPC。明白了吗?
regainworld 2003-07-09
  • 打赏
  • 举报
回复
换成指针试试!

18,356

社区成员

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

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