完成端口的发送和接收问题

freeinsky 2004-12-06 06:14:14
a我做了一个服务器利用了完成端口,
现在有一个问题是,我把accept后的socket与完成端口关联后,
接着就进行了相应的WsaSend,客户端就开始收数据,
在工作线程当中GetQueuedCompletionStatus后,接着WsaSend,可是
有时客户端也会给服务器发送一些控制字,我应该在哪里加入WsaRecv呢
从GetQueuedCompletionStatus返回时如何判断是由recv还是send的情况呢
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2005-04-14
  • 打赏
  • 举报
回复
在客户端与服务器端建立连接后,可以在任何时间投递一下wsarecv请求,只要有客户端发数据过来,这个请求就会被响应。

鉴于你的描述,你可以在accept成功之后,直接投递一个wsarecv,然后,接着作你原来作的wsasend即可。
freeinsky 2004-12-07
  • 打赏
  • 举报
回复
不对啊.在你接收或发送时,要对 IOOperationType设置成相应的东西,
可你如果在不停的发送过程中,开始时是设置成IO_Write,可当有数据从客户端
送来时,你如何知道有客户数据来了,而开始进行相应的接收WsaRecv
pclili 2004-12-07
  • 打赏
  • 举报
回复
typedef enum enum_IOOperationType
{
IO_Accept,
IO_Write,
IO_Read,
IO_Nothing
}IOOperationType, *LPIOOperationType;
pclili 2004-12-07
  • 打赏
  • 举报
回复
typedef struct st_CompletionKey
{
SOCKET socket;
}CompletionKey, *LPCompletionKey;

typedef struct st_OverlappedData
{
OVERLAPPED Overlapped;
WSABUF wsaBuf;
char buff[MAX_PACKET_LEN];
SOCKET socket;
IOOperationType OperationType;
}OverlappedData, *LPOverlappedData;
OperationType根据它来判断是接收还是发送
pclili 2004-12-07
  • 打赏
  • 举报
回复
啊,没有回啊
先顶一下了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧