完成端口用WSASend发送数据的时候,当一个数据包被投递,WSASend返回,然后在某个时候GetQueuecompletionStatus返回,数据包一定被全部发送了吗?会出现有一部分没发需要我重发的情况吗?在我的测试中是全部被发送了的。但是我在SDK里的例子里看到有重发的代码。还有WSARecv也一定能一次把客户端发送的一个数据包一次收完吗?比如客户端发送4K的数据过来,完成端口线程里GetQueuecompletionStatus返回了,这4K的数据一定是全部被接收了而不是只接收一部分吗?
解决方案 »
- 如何在菜单中调用一个对话框。
- 线程和主界面通讯问题。。急!先给100.....
- 很奇怪哦!·
- 使用VC7.0调用动态链接库的问题(不能弹出库中对话框)
- MFC菜单项消息处理问题
- 写这样的语句:_RecordsetPtr m_pRecordset;需要增加什么样的头文件?类型_RecordsetPtr编译器不认,怎么解决这个问题?
- 讨论一下:是在公司学东西多,还是上研究生学的东西多?
- carray第二个参数意思!
- 在vc中怎样对文件中的数据进行操作
- 送分了,http://www.csdn.net/expert/topic/109/109858.shtm
- 新手上路,请教个bs的问题
- 如何让Reprot风格的CListCtrl表头的某一列宽度不能改变大小,表头其它列宽度可以随意改变?
如果需要多次接收的话,那么在下面这种情况下就不好处理了:
客户端发送过来一个结构,
struct data
{
int len;
char buffer[4096];
int flag;
}data;len表示整个数据包的长度,假设服务器端一次没收完,这样就无法把收到的东西转换成相应的结构,也就无法得到数据包的len,无法知道数据包的长度,也就无法判断是否已经把数据包收完,,,我发现这东西麻烦得很,,,
你应该该结构体换成一个BYTE流(或者叫一个包),然后将这个流发送去,另外一端完整的收到这个流之后,再将这个流恢复成结构体。
-=------------------------------------------------------------------
这个我知道,问题是:
如果这个BYTE流一次没收完,就没法恢复成结构体,无法恢复成结构体,就无法得到结构体里包含的包长度信息,得不到包长度信息就无法判断是否已经完整收完了这个包,,,回复人: starcbh(心有灵犀一点通(抵制日货)) ( ) 信誉:96 2004-04-17 13:38:00 得分:0
当然不一定了……用一个结构维护io请求包,网上很多例子
---------------------------------------------------------------------
请问怎么维护?稍微说下思路?