大家好,我现在碰到一个问题,请大家帮我想想办法:
现有界面程序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的数据?
先谢谢大家的回复了!!!

解决方案 »

  1.   

    定时的检查这n个socket client连接是否连通,如果不连通,那么定时重新发起连接。
    把这个功能放到线程里就行了
      

  2.   

    1.多个套接字管理一般使用非阻塞通信方式
    2.可以,自定义消息。接收到数据之后放入一个链表中,通知UI线程处理,UI线程可以通过链表获取Socket数据
    3. 通过应答机制,对方收到数据之后发送一个应答数据,确认数据发送成功。Socket接收到应答之后再通知UI线程
    4.使用心跳包,定时发送数据获取应答,确认Socket连接正常。不正常的话重连
      

  3.   

    你这个说的还真有点乱
    我建议你为什么不给每个client一个线程呢?这样你就好维护了啊
    难道你想一个线程发送数据(发送所有client的数据),另一个线程检查重连(检查所有的client的状态)。我觉得这样是不是不太好呢?