大家好,我有一个关于多线程和socket的问题,困扰我很久了。。

relive_7 2010-07-02 06:04:59
大家好,我现在碰到一个问题,请大家帮我想想办法:
现有界面程序A,A里面有n个socket client,界面程序A可以设置每个client的ip地址,如果设置了ip地址,那么这个client就向局域网内发起连接,若此时局域网内有server在监听该ip,那么连接成功,他们之间会进行通讯。现在头疼的是有一个要求,界面程序A定时的检查这n个socket client连接是否连通,如果不连通,那么定时重新发起连接。

一开始我是用界面程序A完成定时检查功能的,但是在检查时,界面程序A进入假死状态(因为程序在后台进行连接操作,此时用户不能操作界面)。
1.于是我想到了多线程,假设现在有界面线程A1,通信线程A2,A2如何管理n个socket client的通信,采用什么方式,阻塞还是非阻塞方式通信?

2.如果使用非阻塞模式通信,就需要用到消息队列,查了查资料,线程中的ui线程有消息队列,但是我不知道能不能用ui线程接收到不同socket的数据?有哪位大大用过?

3.如何设计才能满足,用户在界面程序A1上选择某个socket后发送一些数据,通信线程A2该如何操作才能完成用户在界面程序A1上发送数据的操作?

4.怎么样设计才能让通信线程A2完成定时检查socket连接状态的功能,而不影响通信线程A2正常接收各个socket的数据?


先谢谢大家的回复了!!!
...全文
50 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenf 2010-07-02
  • 打赏
  • 举报
回复
你这个说的还真有点乱
我建议你为什么不给每个client一个线程呢?这样你就好维护了啊
难道你想一个线程发送数据(发送所有client的数据),另一个线程检查重连(检查所有的client的状态)。。。。我觉得这样是不是不太好呢?
雪影 2010-07-02
  • 打赏
  • 举报
回复
1.多个套接字管理一般使用非阻塞通信方式
2.可以,自定义消息。接收到数据之后放入一个链表中,通知UI线程处理,UI线程可以通过链表获取Socket数据
3. 通过应答机制,对方收到数据之后发送一个应答数据,确认数据发送成功。Socket接收到应答之后再通知UI线程
4.使用心跳包,定时发送数据获取应答,确认Socket连接正常。不正常的话重连
fishion 2010-07-02
  • 打赏
  • 举报
回复
定时的检查这n个socket client连接是否连通,如果不连通,那么定时重新发起连接。
把这个功能放到线程里就行了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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