阅读:2317回复:11
有关TDI问题,恳求高手解答
我在驱动中做了个TDI网络连接,用的是本网站的[虚拟串口2005版本]里面带的例程作的。现在有个问题是,用TCP方式连接上接收发送数据都OK.但是一旦其中一方掉电,或是强行拔掉网线,发送数据就会很长时间才能反映,我测试了一下,最短3秒中。而且在拔掉网线后释放网络,会有很长的延时。
恳请高手,给一个可以探测网络断开的方法,或是让它延时短一点!!小弟不胜感激!! |
|
沙发#
发布于:2007-08-16 17:33
虚拟串口2005版本在哪儿下的啊?唉,没有找到
|
|
板凳#
发布于:2007-08-17 15:24
自己顶一下
谁来帮帮忙给解决一下俺的问题呀!!!! |
|
地板#
发布于:2007-08-21 15:49
唉~~~~没人给解决。自己解决了。
共享一下方法。 TDI连接和断开有超时时间,就不再熬述了。 如果在发送数据或接收数据的时候突然掉网, 这时会有很长的延时,在提问的时候我已经说过了。 解决的方法如下: 创建一个发送数据的线程,再创建一个定时器。用异步IRP. 线程发送数据以前把定时器启动,定时器的间隔时间 为超时时间。如果发送数很快就结束了,就把定时器 取消并把IRP进行返回,如果没有很快结束,定时器 则把IRP数据请求进行返回。 这样就可以解决超时问题。 最后 如果对哪位仁兄有用,给小弟回个贴,鼓励一下,嘿嘿 |
|
地下室#
发布于:2007-08-22 13:18
你有没有测试过超级终端,选择发送--->传送--->发送文本文件,如果用TCP方式在网络正常的情况下传送速度快么?
|
|
5楼#
发布于:2007-08-22 13:24
上面写错了,是选择传送--->发送文本文件
还有一个问题:“如果发送数很快就结束了,就把定时器取消并把IRP进行返回” 怎么判断数据是不是很快就结束了? |
|
6楼#
发布于:2007-08-22 15:00
呵呵,我刚打算入行啊,可能也会做网络一块,顶下
|
|
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 求助贴中还没有人帮忙回复 |
|
8楼#
发布于:2007-08-24 11:35
奇怪,我也是用虚拟串口2005版本改的,里面加了TDI发送TCP的部分,串口工具都试了,正常,但是唯独用超级终端的传送--->发送文本文件,发现发的很慢,没次发出一个包后需要等待大约0.2秒的时间才发下一个包,不知道为什么,郁闷,不过我的最小化就没有问题
|
|
9楼#
发布于:2007-08-24 21:46
你那里加发送接收超时处理了么?超级终端的处理数据方法好像不太一样。明天我到单位在测试测试!
我做的那个驱动是参照虚拟串口2005做的,整个框架都不同了。 |
|
10楼#
发布于:2007-08-27 11:16
我已经用超级终端测试过了
超级终端发送数据是有固定协议的,所以我测试的时候两端都用的是超级终端 接收端也需要手动点击接收。我觉得速度蛮快的,没有什么问题。 还有,再用超级终端的选择串口的时候要把数据流选成无。 |
|
11楼#
发布于:2007-08-27 15:20
先按照你说的试试,有了结果在发上来
|
|