当前位置: 技术问答>linux和unix
(在线等)帮我看看领导给我出的问题,快不行了!!!
来源: 互联网 发布时间:2016-06-30
本文导语: 描述: 采集仪(Linux系统,核心板子)原来一直走GPRS的,后来为了现场调试的需要,说是要增加TCP这一途径来远程传输数据。问题出来了,他说“这东西不是有网口吗?到时候去现场只要一根网线一插,啪,我...
描述:
采集仪(Linux系统,核心板子)原来一直走GPRS的,后来为了现场调试的需要,说是要增加TCP这一途径来远程传输数据。问题出来了,他说“这东西不是有网口吗?到时候去现场只要一根网线一插,啪,我们的数据就可以实时传到现场笔记本。”
问题:
我怎么知道网口插了网线没有?是不是有什么线程函数可以调用来判断网线插上没有!!(我在解释着这些事情时候领导说“你去了解TCP/IP的东西去,他们自己不就有吗?原来网络连接时断开的,我一插,他就自动显示连接上了,可以有函数调用的吧!”)
而且:采集仪必须弄成server模式,原来数据传输走GPRS时,当有网线插上时候,实时数据又走TCP/IP,这个用多线程怎么实现,给点思路呀???着急!!!!!!!!!
采集仪(Linux系统,核心板子)原来一直走GPRS的,后来为了现场调试的需要,说是要增加TCP这一途径来远程传输数据。问题出来了,他说“这东西不是有网口吗?到时候去现场只要一根网线一插,啪,我们的数据就可以实时传到现场笔记本。”
问题:
我怎么知道网口插了网线没有?是不是有什么线程函数可以调用来判断网线插上没有!!(我在解释着这些事情时候领导说“你去了解TCP/IP的东西去,他们自己不就有吗?原来网络连接时断开的,我一插,他就自动显示连接上了,可以有函数调用的吧!”)
而且:采集仪必须弄成server模式,原来数据传输走GPRS时,当有网线插上时候,实时数据又走TCP/IP,这个用多线程怎么实现,给点思路呀???着急!!!!!!!!!
|
我简单说下建立的过程吧,反正板子和笔记本,肯定一端是server,一端是client
在server端创建socket(),然后bind()网口和端口,然后就开始listen()。一个新的连接请求到来时,直接
accept(),这样一个连接就建立起来了
在client端创建socket(),然后connect() server,connect()会触发TCP的三次握手。因为三次握手的第一个
消息是从client端发给server端的,如果底层网络不通,那消息根本就发不过去,connect()也会失败。所以你
只要在client端简单的判断一下connect()是否成功就行了。这是连接建立的过程
当连接建立好之后,开始收发数据。这个时候加入网络突然断了,通常两端的传输层并不能立刻感知到,而当
继续send()或者receive()数据的时候,就会报错了。或者收到对端的RST消息,或者返回一个错误值。这个时
候你的应用程序也就知道底层连接出问题了
在server端创建socket(),然后bind()网口和端口,然后就开始listen()。一个新的连接请求到来时,直接
accept(),这样一个连接就建立起来了
在client端创建socket(),然后connect() server,connect()会触发TCP的三次握手。因为三次握手的第一个
消息是从client端发给server端的,如果底层网络不通,那消息根本就发不过去,connect()也会失败。所以你
只要在client端简单的判断一下connect()是否成功就行了。这是连接建立的过程
当连接建立好之后,开始收发数据。这个时候加入网络突然断了,通常两端的传输层并不能立刻感知到,而当
继续send()或者receive()数据的时候,就会报错了。或者收到对端的RST消息,或者返回一个错误值。这个时
候你的应用程序也就知道底层连接出问题了
|
许多网卡有自己的状态寄存器,也就是说,插上网线,寄存器的状态会有变化,
所以驱动中可以以查询的方式去了解是否有网线插入, 比如收发数据的时候查询该寄存器的状态。
kernel中有没有提供专门的接口让应用程序去了解物理连接就不知道了,没仔细看过。
不过,如果实在需要自己修改一下网卡驱动也是可以实现的。
不过楼主的情况并不需要立即感知网线是否有插入,所以不需要关心这个,就象楼上说的,
作为server 直观监听就行了,有链接上来就接受。
所以驱动中可以以查询的方式去了解是否有网线插入, 比如收发数据的时候查询该寄存器的状态。
kernel中有没有提供专门的接口让应用程序去了解物理连接就不知道了,没仔细看过。
不过,如果实在需要自己修改一下网卡驱动也是可以实现的。
不过楼主的情况并不需要立即感知网线是否有插入,所以不需要关心这个,就象楼上说的,
作为server 直观监听就行了,有链接上来就接受。
|
既然你是server端就不用考虑这么多哈,反正是客户端来连接你的,有客户端连接上了你就工作,又不用管GPRS还是网线