2.3.6 创建接收客户端数据的线程
为CTCPSocket_Server类添加访问权限为private的成员函数Newconnect(),在该函数中调用CreateThread()函数创建接收客户端数据的线程。
int index = m_client_currentindex;
m_recvdata_threadhandle_array[index] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&CTCPSocket_Server::ThreadFunc_RecvData, this, 0, NULL);
首先将客户端在“套接字池”中的索引号保存在临时变量
index
中,接下来调用
CreateThread()
函数创建接收客户端数据的线程,该线程的函数为“
2.3.5
创建接收数据线程函数”中提到的线程函数
ThreadFunc_RecvData()
。
m_recvdata_threadhandle_array
是
CTCPSocket_Server
类的成员变量,其类型是
HANDLE
的数据,用来保存接收客户端数据线程的句柄,其声明代码为
HANDLE m_recvdata_threadhandle_array[MAX_CONNECTION];
3 向客户端发送数据
为CTCPSocket_Server类添加访问权限为public的成员函数SendToClient()。
3.1 声明函数
SendToClient()的格式为
bool SendToClient(int index, char* info, int length)
其中,参数index
表示“套接字池”中套接字的索引,通过该套接字向客户端发送数据;
info
表示向客户端发送的信息;
length
表示发送信息的长度。
3.2 定义函数
通过send()函数向客户端发送数据。该函数的格式为
int send(SOCKET s, const char* buf, int len, int flags);
其中,参数s
表示指定的套接字,通过该套接字向客户端发送数据;
buf
表示发送的数据;
len
表示发送数据的长度;
flags
影响
send()
函数的行为,该参数设置为
0
表示函数无特殊行为。如果成功发送数据,则
send()
函数的返回值是实际发送数据的大小,否则返回值是
SOCKET_ERROR
。
在SendToClient()中,调用send()函数发送数据
int infolength_sendtoclient = send(m_clientsocket_array[index], info, length, 0);
其中,m_clientsocket_array
是“
2.3.3
定义线程函数”中提到的套接字数组,
index
是
SendToClient()
函数的参数。