需求:
若服务端先上线就等待客户端连接,客户端则正常连接。当客户端先上线,服务端还没上线,或当服务端掉线时,则客户端不断重新连接服务端,直到服务端上线。服务端与客户端任意一端掉线,能提示掉线。
解决:
服务端开一个线程,负责循环等待客户端连接,当客户端连接成功则进入循环接收客户端heartbeat数据检测客户端是否掉线,掉线则重新进入等待。(若需要同时服务多个客户端,则需要两个线程,一个负责等待连接,另一个负责接收数据与检测是否掉线,那socketfd、客户端地址、线程号等数据可能都要维护,当客户端掉线时就销毁线程与数据)
客户端需要开两个线程,一个线程负责不断连接服务器直到成功,若成功连接就进入定时发送heartbeat数据来检测服务端是否掉线,掉线则退出发送进入重连;另外一个线程负责接收服务端数据,接收时服务器掉线也马上重连。(用了一个全局变量来表示是否连接成功,这两个线程都会修改这个全局变量,就用了互斥锁),可以把select函数用在接收线程中.