RecvDataThread()函数接收服务器发送的数据结果,并负责通知主线程显示该结果。该函数以客户端连接状态bConnecting变量为while语句循环条件。
当套结字缓冲区无数据时,recv()函数立即返回,并返回WSAEWOULDBLOCK错误代码。执行continue语句,继续调用recv()函数接收数据结果。
当套结字缓冲区有数据时,recv()函数返回读入数据的长度。在程序中增加返回值必须大于HEADERLEN长度的判断,以防止其他意外的情况。使用memcpy()函数将数据复制到接收数据缓冲区。调用SetEvent()函数设置显示数据hEventShowDataResult事件对象为有信号状态,通知主线程显示数据。
在该函数中,对前面所述客户端被动关闭的情况进行了同样的处理。
此外,客户端还有一种被动关闭的情况。主线程等待用户输入数据时,就是在InputAndOutput()函数执行到下面语句。此时,客户端与服务器的连接断开,主线程等待在这里。</