问题记录:
1.写这个代码的时候犯了一个最低级的问题搞错了优先级。++的优先级要大于==的优先级要大于=的优先级,最好用括号来避免这种问题。
2.在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项。一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。这个套接字选项通知内核,如果端口忙,但TCP状态位于TIME_WAIT,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明"地址已经使用中"。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR选项非常有用。必须意识到,此时任何非期望数据到达,都可能导致服务程序反应混乱,不过这只是一种可能,事实上很不可能。
3.服务器开启keepalive功能,并修改了默认的keepalive参数。目的是检测客户端是否还处于连接。
Server.cpp
//使用WinSock2库之前,要做准备工作,即调用WSAStartup初始化WinSock库。初始化后,才能使用WinSock2库
//使用完WinSock2库后,要做清理工作,即调用WSAC