terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
阅读:1575回复:6

Tdi driver的问题

楼主#
更多 发布于:2003-12-25 11:19
最近在写Tdi driver遇到了一个问题,请大伙帮忙看看。
在ClientEventReceive handler 里面如果TDI_RECEIVE_ENTIRE_MESSAGE 被clear了(RECEIVE_PARTIAL
is set),怎么能得到这个full TSDU一共多少数据呢?
BytesAvailable这个数值好像不对。
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-25 13:51
我是这样写的
if( ReceiveFlags & TDI_RECEIVE_ENTIRE_MESSAGE )// 数据全部在TSDU里面
{
*BytesTaken = BytesAvailable;
TcpFillSocketReceiveBuffer( pSession,Tsdu, BytesAvailable); // 填充Socket数据区

TcpFillDeviceReceiveBuffer( pSession ); // 分析数据包
}
else // ---------- 这个包还不是最后一部分 -----------
{
*BytesTaken = BytesIndicated;
TcpFillSocketReceiveBuffer( pSession,Tsdu, BytesIndicated); // 填充Socket数据区
}
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-25 14:07
没有完全理解你的意思,你是不是说每次把byteindicated的数据取走,bytetaken=byteindicated?,但是应该return什么status呢?
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-25 14:14
自己做一个接收缓冲区,等把包全部接收下来再处理.因为Socket会拆包的.
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-25 14:20
可是我现在是在kernel mode,没有socket啊,而且按照你的程序,如果TDI_RECEIVE_ENTIRE_MESSAGE clear了每次只receive byteindicated 的数据,然后是不是return呢,然后ClientEventReceive被再调用?如果是这样那么返回的status是什么呢?
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-25 14:26
当然要马上return STATUS_SUCCESS;
ClientEventReceive()会再次调用的.*BytesTaken 一定要赋值,否则不再调用了.
一定要注意此时在DISPATCH_LEVEL上
terrychen
驱动小牛
驱动小牛
  • 注册日期2002-04-15
  • 最后登录2014-03-13
  • 粉丝0
  • 关注0
  • 积分174分
  • 威望68点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-25 14:42
ok,
I will try it.Thank you very much.
 :D
游客

返回顶部