WSASend问题?急!

robin_yao 2006-04-18 08:49:41
在完成端口中我投递了WSASend后用GetQueuedCompletionStatus得到了完成的消息。
但是我判断传输的字节数量发现,有的WSASend没投递的很成功,于是我就把BUFFER的指针重新指向未投递成功的那部分BUFFER。但是总是失败,我知道肯定是我的数据结构设计的有问题!

typedef enum _tagIO_OPERATION
{
ClientIoAccept,
ClientIoRead,
ClientIoWrite
} IO_OPERATION, *PIO_OPERATION;


typedef struct _tagPER_IO_OPERATION_DATA
{
OVERLAPPED Overlapped;
WSABUF DataBuf;
char Buffer[DATA_BUFSIZE];
IO_OPERATION OperationType;
int State;
DWORD RecvBytes;//只表示投递接受未成功的字节数,成功完成后全部清0
DWORD SendBytes;//只表示投递发送未成功的字节数,成功完成后全部清0
} PER_IO_OPERATION_DATA, * PPER_IO_OPERATION_DATA;

我想问的是在我的PER_IO_OPERATION_DATA结构体中,一个 char Buffer[DATA_BUFSIZE];
够了吗?是否该给WSASend和WSARecv都分配一个???

假如WSASend和WSARecv都各有一个,如下
char SendBuffer[DATA_BUFSIZE];
char RecvBuffer[DATA_BUFSIZE];
我在GetQueuedCompletionStatus后假如发现该WSASend未发送的很完整。我
将SendBuffer中的数据未发的部分重发的时候,会不会被新的投递过来的WSASend将SendBuffer中的数据冲掉??(每个SOCKET都只有一个结构体)
如果这样的话我该怎么做?难道是为每个投递的WSASend都分配一个BUFFER???

只有这么多分了。。。
...全文
302 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengge8ylf 2006-04-18
  • 打赏
  • 举报
回复
你的意思是投递一个,再判断被投递的是否成功,成功了再投递第二个??
---------------------------------
对 这是最可靠的办法
wqrz 2006-04-18
  • 打赏
  • 举报
回复
一般的做发是当一个连接进来的时候new一个PER_IO_OPERATION_DATA结构 然后用CMap或CList保存
char SendBuffer[DATA_BUFSIZE];
char RecvBuffer[DATA_BUFSIZE];
每个PER_IO_OPERATION_DATA结构要有SendBuffer RecvBuffer各一个

这样互不干扰
robin_yao 2006-04-18
  • 打赏
  • 举报
回复
gohappy_1999(碧水蓝天) ( ) 信誉:100


关于
将SendBuffer中的数据未发的部分重发的时候,会不会被新的投递过来的WSASend将SendBuffer中的数据冲掉??
你回答的不会,但是我感觉我WSASend和GetQueuedCompletionStatus之后的时候都用的同一个BUFFER啊。肯定可能会冲掉。你能解释一下吗?

robin_yao 2006-04-18
  • 打赏
  • 举报
回复
fengge8ylf() ( ) 信誉:98
你的意思是投递一个,再判断被投递的是否成功,成功了再投递第二个??
fengge8ylf 2006-04-18
  • 打赏
  • 举报
回复

将SendBuffer中的数据未发的部分重发的时候,会不会被新的投递过来的WSASend将SendBuffer中的数据冲掉??
---------------------
看你怎么处理了
而且 这种情况下要等上一个包发送完毕 才能发送下一个包 不然在应用层数据会乱
再有 我还没遇见过WSASend只发送成功一部分数据的情况
robin_yao 2006-04-18
  • 打赏
  • 举报
回复
但是我判断传输的字节数量发现,有的WSASend没投递的很成功,于是我就把BUFFER的指针重新指向未投递成功的那部分BUFFER。但是总是失败
错误代码是多少?是10055
gohappy_1999 2006-04-18
  • 打赏
  • 举报
回复
但是我判断传输的字节数量发现,有的WSASend没投递的很成功,于是我就把BUFFER的指针重新指向未投递成功的那部分BUFFER。但是总是失败
--------------------------------------
错误代码是多少?

将SendBuffer中的数据未发的部分重发的时候,会不会被新的投递过来的WSASend将SendBuffer中的数据冲掉??
---不会

18,356

社区成员

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

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