yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:2317回复:11

有关TDI问题,恳求高手解答

楼主#
更多 发布于:2007-08-16 11:49
我在驱动中做了个TDI网络连接,用的是本网站的[虚拟串口2005版本]里面带的例程作的。现在有个问题是,用TCP方式连接上接收发送数据都OK.但是一旦其中一方掉电,或是强行拔掉网线,发送数据就会很长时间才能反映,我测试了一下,最短3秒中。而且在拔掉网线后释放网络,会有很长的延时。
恳请高手,给一个可以探测网络断开的方法,或是让它延时短一点!!小弟不胜感激!!
   
smartroseseast
驱动牛犊
驱动牛犊
  • 注册日期2006-06-07
  • 最后登录2010-01-07
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-16 17:33
虚拟串口2005版本在哪儿下的啊?唉,没有找到
yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-17 15:24
自己顶一下

谁来帮帮忙给解决一下俺的问题呀!!!!
yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-08-21 15:49
唉~~~~没人给解决。自己解决了。
共享一下方法。
TDI连接和断开有超时时间,就不再熬述了。
如果在发送数据或接收数据的时候突然掉网,
这时会有很长的延时,在提问的时候我已经说过了。
解决的方法如下:
创建一个发送数据的线程,再创建一个定时器。用异步IRP.
线程发送数据以前把定时器启动,定时器的间隔时间
为超时时间。如果发送数很快就结束了,就把定时器
取消并把IRP进行返回,如果没有很快结束,定时器
则把IRP数据请求进行返回。
这样就可以解决超时问题。

最后
如果对哪位仁兄有用,给小弟回个贴,鼓励一下,嘿嘿
lanyu826
驱动小牛
驱动小牛
  • 注册日期2006-03-22
  • 最后登录2009-02-27
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望114点
  • 贡献值0点
  • 好评度113点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-22 13:18
你有没有测试过超级终端,选择发送--->传送--->发送文本文件,如果用TCP方式在网络正常的情况下传送速度快么?
lanyu826
驱动小牛
驱动小牛
  • 注册日期2006-03-22
  • 最后登录2009-02-27
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望114点
  • 贡献值0点
  • 好评度113点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-08-22 13:24
上面写错了,是选择传送--->发送文本文件
还有一个问题:“如果发送数很快就结束了,就把定时器取消并把IRP进行返回”
怎么判断数据是不是很快就结束了?
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2007-08-22 15:00
呵呵,我刚打算入行啊,可能也会做网络一块,顶下
yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-08-23 21:40
如果发送完成,很快就有返回了。就是说,正常的网络传输不会太长,一般100个毫秒能发送n百个字节了。超时定时器的作用是,如果在指定时间内没有返回,则用定时器进行IRP返回,在线程里判断一下IRP是否为空就OK了。回头我把相关的代码传上来。
那些串口测试工具都测试过了,没有问题。

现在我遇到新的问题,就是在用串口测试工具发送过程中没有问题,但是串口工具最小化再恢复的时候,就出现蓝屏错误是DRIVER_IRQL_NOT_LESS_OR_EQUAL。
http://bbs.driverdevelop.com/htm_data/16/0708/104904.html 求助贴中还没有人帮忙回复
lanyu826
驱动小牛
驱动小牛
  • 注册日期2006-03-22
  • 最后登录2009-02-27
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望114点
  • 贡献值0点
  • 好评度113点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-08-24 11:35
奇怪,我也是用虚拟串口2005版本改的,里面加了TDI发送TCP的部分,串口工具都试了,正常,但是唯独用超级终端的传送--->发送文本文件,发现发的很慢,没次发出一个包后需要等待大约0.2秒的时间才发下一个包,不知道为什么,郁闷,不过我的最小化就没有问题
yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-08-24 21:46
你那里加发送接收超时处理了么?超级终端的处理数据方法好像不太一样。明天我到单位在测试测试!
我做的那个驱动是参照虚拟串口2005做的,整个框架都不同了。
yonghen21
驱动牛犊
驱动牛犊
  • 注册日期2006-08-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分329分
  • 威望96点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-08-27 11:16
我已经用超级终端测试过了
超级终端发送数据是有固定协议的,所以我测试的时候两端都用的是超级终端
接收端也需要手动点击接收。我觉得速度蛮快的,没有什么问题。
还有,再用超级终端的选择串口的时候要把数据流选成无。
lanyu826
驱动小牛
驱动小牛
  • 注册日期2006-03-22
  • 最后登录2009-02-27
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望114点
  • 贡献值0点
  • 好评度113点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-08-27 15:20
先按照你说的试试,有了结果在发上来
游客

返回顶部