该程序在IP127.0.0.1以及端口5000环境下测试
有一段时间没有在Windows下用C++进行网络编程了,这段日子都在做QT的网络编程和OpenCV的图像识别。
今天重新写个Windows下C++的,基于TCP的双端连接建立与断开检测的demo,巩固下自己Windows下的网络编程知识点。
在下面的代码共有四个类,一个内部结构体,以下是他们的介绍。
WebException类可以忽略,是一个异常类,用于反馈意外情况。
WebBase类是服务端和客户端的基类,用于初始化共同的基本数据。
Server类是服务端类,用于接收客户端连接。
Client类是客户端类,用于连接服务端。
Server类的内部结构体ClientSocket,用以保存已经连接到服务端的客户端Socket。
由于只是做个简单的相互检测连接与断开的demo,所以整个程序就全在这一个cpp中了。
该demo的主要功能是:
- 服务器能被连接十次,服务器可以检测客户端断开与否。
- 客户端连接上服务器后,客户端可以检测到与服务器失联与否。
服务端的整体思路是:
主线程负责检测客户端的连接请求,服务端同意连接获取到客户Socket后,以clock()获取到的值当作客户id,以id为key,将客户Socket保存到cliSockets这个map中;
保存好客户Socket后,开启一条线程用以检测连接是否丢失,如果丢失了(暂不考虑重连),则回收客户的Socket与相应线程资源;
此外,为了了解服务端关闭后,客户端的失联处理,服务端被设置成只能连接十次;
十次后关闭服务端,服务端这次的主动关闭将回收所有存活的客户端Socket和相应的线程资源。
安全回收后,服务端正式关闭。
客户端的整体思路是:
主线程负责检测连接上服务端,每秒尝试一次连接,连接成功获取到服务端Socket后开启一条线程用以检测连接是否丢失,如果丢失了(暂不考虑重连),则回收服务端的Socket与相应线程资源;
如果客户端发现在主动断开与服务端的连接前就已经无法联系服务端,那么将回收服务端Socket和相应的线程资源。
安全回收后,客户端正式关闭。
#pragma comment(lib,"Ws2_32.lib")
#include
#include
#include
#include
#include