[第一次写重叠I/O]:服务器接收到客户端发来的信息后,如何向客户端回送收到的信息?

时间:2023-01-20 08:36:13
代码是用《手把手教你玩转SOCKET模型之重叠I/O篇》的例程改的。

例程里面对 重叠I/O处理线程 的工作如下:
1) 为套接字创建一个WSAOVERLAPPED结构,并为该结构分配一个事件对象句柄。也将事件对象句柄分配给一个事件数组,以便稍后由WSAWaitForMultipleEvents函数使用。
2) 在套接字上投递一个异步WSARecv请求,指定参数为WSAOVERLAPPED结构。
3) 使用步骤1)的事件数组,调用WSAWaitForMultipleEvents函数,并等待与重叠调用关联在一起的事件“触发”。
4) WSAWaitForMultipleEvents函数完成后,针对事件数组,调用WSAResetEvent(重设事件)函数,从而重设事件对象,并对完成的重叠请求进行处理。
5) 使用WSAGetOverlappedResult函数,判断重叠调用的返回状态是什么。
6) 在套接字上投递另一个重叠WSARecv请求。
7) 重复步骤3~6。


我为了给客户端返回一个信息,就是把客户端发来的消息返回给客户端,在 第5)步 和 第6)步之间加入了以下代码:

创建一个临时的WSAOVERLAPPED结构和事件对象句柄,以及几个DWORD变量还有一个 
WSABUF buf;(存储了客户端发来的数据)
进行初始化(关联等。。。。。)
然后调用  WSASend(使当前socket,其他参数填创建的临时变量)



现在的问题是,如果 将第5步时 WSARecv 的 WSABUF变量值,直接赋给 buf 的话,客户端在第一次收到正确的数据,然后就不停的收到很多空字符串(我的客户端是用MessageBox来显示结果),大约有70次左右

如果把 buf 的值,设置为 buf.buf = "test"; buf.len = strlen("test"),则一切正常,客户端就不会收到空字符串



======================================================
请问我是不是做错了?应该怎么做?

2 个解决方案

#1


程序贴上来

#2


结贴吧 呵呵

#1


程序贴上来

#2


结贴吧 呵呵