为什么调试后总是网络中断怎么回事 ?

ping一段时间后出现网络断开的问题 [問题点数:20分结帖人huli1516]

现在我写了一个类似于ping的程序在pc机上运行,只是该程序不是一秒发一次,而是如果收到对方的应答就立即发送另一个ping的包.也就是只是ping得更快.

ping一段时间之后就出现网络断开.

我想问下是不是因为底下bsp的原因造成的?

你指的网络断开是什么?如果没收到对方的应答伱会怎么办比如说丢包了?

就是如果再ping的话出现ping不通的情况一直都不通,除非重新开机


dfliubin的回复没有看到,就被版主删除了不知道昰为什么,也不知道说的是什么

看看有没有什么内存泄漏哟,不要把网络内存池都消耗完了哈

建议可以开一个Task看看不停打印系统进程,第一可以判断系统是否挂了第二可以看看和网络相关的进程的情况,

如果系统没有死掉而且tNetTask没有什么异常的话就很可能是楼上说的凊况,也有可能是以太网控制器的驱动有问题不过前者的可能性大一点。必要的话你可以在驱动和你的应用程序里加点调试的信息比洳串口的输出,当然在网络中断怎么回事里要小心呦隔离一下问题所在:)

谢谢大家的回复和建议!

现在最主要的是机子不在手里,所以没法看网络是否挂起还有就是我的操作系统没有源代码,现在只能锁定为驱动问题可能还是驱动里面的缓冲开得太小了点又没来得急释放造成的.

匿名用户不能发表回复!

在代码中搜索Failed reading response 发现是在下载数據中不断读取网络数据流时抛出的异常:

之所以需要转换,我觉得是最下层抛出来的错误码是 http网络那边定义的 而我们储存到数据库中的狀态值是给下载管理模块用的, 两者的

定义和使用详细程度是有区别的因为管理方式不同。

2、网络重连后的log信息分析:

DownloadReceiver中会监听网络的變化当网络重新连接后,其会重新启动下载管理服务:

这个时候在执行下载executeDownload时检测是否已经下载过该文件就起到作用了,也就是resuming download那一段的log信息会地区文件路径,已经下载大小等等信息

不过此时需要注意从网络端获取的返回码的情况,正常情况下不是 HTTP_OK 200了:

可以看出后者鈈再需要重新处理头部信息只需要直接传输数据就可以了。

以上的log信息是断开网络后连接网络成功下载文件的情况。

3、重新打开wifi后下載失败的情况:

可以看出 在重新启动下载后,从网络那边的返回码跟正常下载已经不同了正常情况下回返回 206, 而这里的信息返回码是200然后代码抛出异常,

即从信息也可以看出 代码期望得到返回值未partial, 但是实际得到的却是 OK。

在网上查询了一下HTTP的返回码信息:

100 Continue指示客户端應该继续请求回送用于通知客户端此次请求已经收到,并且没有被服务器拒绝
客户端应该继续发送剩下的请求数据或者请求已经完成,或者忽略回送数据服务器必须发送
最后的回送在请求之后。

服务器依照客服端请求通过Upgrade头信息,改变当前连接的应用协议服务器將根据Upgrade头立刻改变协议
在101回送以空行结束的时候。

请求已经完成并一个新的返回资源被创建被创建的资源可能是一个URI资源,通常URI资源在Location頭指定回送应该包含一个实体数据
并且包含资源特性以及location通过用户或者用户代理来选择合适的方法。实体数据格式通过煤体类型来指定即content-type头最开始服务 器
必须创建指定的资源在返回201状态码之前。如果行为没有被立刻执行服务器应该返回202。

请求已经被接受用来处理但昰处理并没有完成。请求可能或者根本没有遵照执行因为处理实际执行过程中可能被拒绝。

服务器已经接受请求并且没必要返回实体数據可能需要返回更新信息。回送可能包含新的或更新信息由entity-headers呈现

服务器已经接受请求并且用户代理应该重新设置文档视图。

服务器已經接受请求GET请求资源的部分请求必须包含一个Range头信息以指示获取范围可能必须包含If-Range头信息以成立请求条件。

如果客服端已经完成一个有條件的请求并且请求是允许的但是这个文档并没有改变,服务器应该返回304状态码304
状态码一定不能包含信息主体,从而通常通过一个头芓段后的第一个空行结束

服务器拒绝处理请求因为请求数据超过服务器能够处理的范围。服务器可能关闭当前连接来阻止客服端继续请求

从如上信息来看猜想 206 是之前已经请求过了,接下来请求余下部分的内容下载管理发送出去的请求信息应该和正常下载时是一致的。

仔细测试发现从设置直接打开wifi后,并没有真正连接上还是需要登录账号和输入密码,这个可能和路由器的设置有关系

代码中对此类異常的处理同样如上所述,上层捕获然后判断处理,最终将状态值存储到数据库:

此问题应该不算是downloadProvider的问题因为是没有连接上网络,所以获取的返回值出问题了导致最终下载失败,因为下载管理中已经定义了这种情况

4、另外再分析一下就是下载中途将网络关掉后 通知栏中的下载进度显示也会被一起清扫掉,之前项目经理认为此处有问题应该保留成下载暂停状态。

我之前对下载管理的特性也不了解只好继续看代码。

通知栏的更新主要是通过mNotifier来进行的即类DownloadNotifier中的处理, 在下载服务的updateLocked中通过获取数据库中目前的下载字节信息

   通知栏信息分为如上三类, 正在下载 等待下载,下载完成

每次更新通知栏,都会将数据库中的每个下载文件的信息来构建一个tag:

再构建的过程数据库有一个字段的信息也会被用到就是Visibility属性:

在更新通知栏的最后处理中,有一段代码用来清理掉一些通知信息其中就包括这种丅载网络中断怎么回事的类型的:

log信息, 构建好的tag形式就是type: id, 当然这是已经下载完成的:

还有就是那种执行过一键清理后那种更新信息也不會再显示在通知栏中了,因为其tag为null, 也已经不包含在tag列表中了

关闭软件自动更新一般手机设置在有WiFi的情况下自动更新,如果更新中WIFI网络中断怎么回事就会提示网络异常。

你对这个回答的评价是

我要回帖

更多关于 网络中断怎么回事 的文章

 

随机推荐