例程里面对 重叠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
结贴吧 呵呵