当前位置: 技术问答>Socket网络高手请进,关于socket通讯.
iis7站长之家
socket通讯问题 非常怪异!
来源: 互联网 发布时间:2016-06-28
本文导语: 最近一直被一个网络通讯问题折磨着,,,望大家不吝赐教。 现象描述如下: Linux嵌入式盒子里跑一个有网络通讯功能的程序,UDP和TCP两种方式我都试过了 1. 盒子内部运行一个UDP监听程序 电脑端一个程序不停地向...
最近一直被一个网络通讯问题折磨着,,,望大家不吝赐教。
现象描述如下:
Linux嵌入式盒子里跑一个有网络通讯功能的程序,UDP和TCP两种方式我都试过了
1.
盒子内部运行一个UDP监听程序
电脑端一个程序不停地向该盒子发送UDP包(大约1秒10个包),刚开始能接收到数据包,过段时间盒子就自动停止接收数据了。我观察了一下,大概发送3000~5000个包之后,盒子又开始接收数据,接收一小会又停掉了,如此反复。
变通方式:当盒子主动ping外界,或者主动往外界发送数据,,则盒子能较好地接收外界的数据包。而且盒子向外发送的速度越快,它接收来自外部数据的效果越好(曾试过间隔1秒、3秒的情况,前者丢包更少)
2.
盒子内部运行一个tcp server,电脑用一个client去连接,并发送TCP包
当盒子不主动向外部发送数据包或者ping命令,则电脑端的client连接偶尔会成功,即使成功了,向盒子发送数据,server端也接收不到数据,,,电脑client端发送一段时间了,就报告错误Asynchronous error 10053,好像是盒子server端断开了连接?这种情况下,我查看了下抓包记录,如果connect成功了,有三次握手记录,但之后client发送的数据都没有收到server端的应答,而且当client关闭的时候,也没有发现server应答
当盒子不停地ping外界,则server可以响应connect,正常接收到TCP数据包。
另外,盒子server不主动向外部发送任何数据时,电脑client端,当把arp缓存中的server项删除后,发起connect,显示首先ARP-Request、ARP-Reply,连接成功,之后server端不接收任何数据。 如果电脑client端的arp缓存中存在server项,则发起connect,则无任何响应。
我认为server端运行的应用程序应该没问题的,很简单的一个接收程序,,放到linux虚拟机上运行server,则一切都正常的。内核用的ti提供的,,DM6446,Davinci环境。。。。不会是底层网络驱动有问题吧?搞得我头晕,,,
各位高人帮忙分析一下这个现象
现象描述如下:
Linux嵌入式盒子里跑一个有网络通讯功能的程序,UDP和TCP两种方式我都试过了
1.
盒子内部运行一个UDP监听程序
电脑端一个程序不停地向该盒子发送UDP包(大约1秒10个包),刚开始能接收到数据包,过段时间盒子就自动停止接收数据了。我观察了一下,大概发送3000~5000个包之后,盒子又开始接收数据,接收一小会又停掉了,如此反复。
变通方式:当盒子主动ping外界,或者主动往外界发送数据,,则盒子能较好地接收外界的数据包。而且盒子向外发送的速度越快,它接收来自外部数据的效果越好(曾试过间隔1秒、3秒的情况,前者丢包更少)
2.
盒子内部运行一个tcp server,电脑用一个client去连接,并发送TCP包
当盒子不主动向外部发送数据包或者ping命令,则电脑端的client连接偶尔会成功,即使成功了,向盒子发送数据,server端也接收不到数据,,,电脑client端发送一段时间了,就报告错误Asynchronous error 10053,好像是盒子server端断开了连接?这种情况下,我查看了下抓包记录,如果connect成功了,有三次握手记录,但之后client发送的数据都没有收到server端的应答,而且当client关闭的时候,也没有发现server应答
当盒子不停地ping外界,则server可以响应connect,正常接收到TCP数据包。
另外,盒子server不主动向外部发送任何数据时,电脑client端,当把arp缓存中的server项删除后,发起connect,显示首先ARP-Request、ARP-Reply,连接成功,之后server端不接收任何数据。 如果电脑client端的arp缓存中存在server项,则发起connect,则无任何响应。
我认为server端运行的应用程序应该没问题的,很简单的一个接收程序,,放到linux虚拟机上运行server,则一切都正常的。内核用的ti提供的,,DM6446,Davinci环境。。。。不会是底层网络驱动有问题吧?搞得我头晕,,,
各位高人帮忙分析一下这个现象
|
这个好像是握手信号出新了问题,网卡和路由器/交换机匹配有点问题。你直连看看。
我们的现象是板子插上网线后,如果不向外发送数据,则外部不能访问到板子。向外ping10-20包后,就能访问到。
我们的现象是板子插上网线后,如果不向外发送数据,则外部不能访问到板子。向外ping10-20包后,就能访问到。
|
能抓包吗?
看包是最实际,最有效的分析手段!
看包是最实际,最有效的分析手段!
|
是不是你的盒子做了一个NAT在里面? 这些需要盒子往外面发送数据来激活一条通道后,外界也就是PC发出的数据可以通过NAT到达你盒子内部. 而盒子不主动往外发就没有外界到内部的通道.