拔掉网线 然后在插上 仍然能够继续通信

panzhijiepanzhiyang 2011-03-22 10:07:42
我使用的CAsyncSocket异步通信,但是拔掉网线之后,不响应OnCLose消息,插上仍然能够继续通信,不响应Close消息可以理解,但是插上之后仍然能够继续通信,这个是不是正常的情况,我是不是可以认为,不管网线被拔掉多长时间,只要给插上,它们还是能够继续通信。还有就是通过Send我可不可以判断连接是否还有效,如果返回的错误不是WSAEWOULDBLOCK,是不是就可以认为连接一定已经无效了
...全文
1038 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2011-03-22
  • 打赏
  • 举报
回复
这个拔掉网线马上插上确实会出现这个现象。
但是在拔掉网线还未插上这段时间如果send的话,是不成功的。
如果这段时间没有send,之后插上了再send有时候是可以的。
smwhotjay 2011-03-22
  • 打赏
  • 举报
回复
如果你把网线拔了.隔几秒再插上. socket其实依然有效地. 我测试过.当然,如果你拔网线后,c/s发包通讯.肯定会socket err的.
  • 打赏
  • 举报
回复
很想看看tcp/ip 协议 从底层弄清楚它 天天老板像催命一样 真是无暇他顾 底层的socket其实也是一样的
i0229 2011-03-22
  • 打赏
  • 举报
回复
断线后,还能发送成功?不是的吧
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 panzhijiepanzhiyang 的回复:]

我发送数据已经成功了 为什么你们不相信呢
还有就是我想请教一下,为什么我用timer线程发送心跳测试,过几分钟,跟外网就失去联系了
去掉time线程就完全可以了,这个问题其实更让我头疼,我一直都没弄明白,原来那个项目不用判断拔网线,现在这个必须得判断,可是我完全找不到原来发生问题的原因
[/Quote]

这个我信你,绝大多数情况下插上网线还是能继续通的,必须要考虑万一不通的情况
当初程序最后检测有一项是要插拔网线的,服务器端的监听端口拔掉网线居然也是多数时候通,但有时也不通,这个时候心跳都解决不了,真是个郁闷啊
jwybobo2007 2011-03-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 panzhijiepanzhiyang 的回复:]
我使用的CAsyncSocket异步通信,但是拔掉网线之后,不响应OnCLose消息,插上仍然能够继续通信,不响应Close消息可以理解,但是插上之后仍然能够继续通信,这个是不是正常的情况,我是不是可以认为,不管网线被拔掉多长时间,只要给插上,它们还是能够继续通信。还有就是通过Send我可不可以判断连接是否还有效,如果返回的错误不是WSAEWOULDBLOCK,是不是就可以认为连接一定已经无效了
[/Quote]

这个是正常现象,在短时间内拔插是可以正常通信的。但是长时间拔掉,再插就不可以正常通信了。
  • 打赏
  • 举报
回复
我发送数据已经成功了 为什么你们不相信呢
还有就是我想请教一下,为什么我用timer线程发送心跳测试,过几分钟,跟外网就失去联系了
去掉time线程就完全可以了,这个问题其实更让我头疼,我一直都没弄明白,原来那个项目不用判断拔网线,现在这个必须得判断,可是我完全找不到原来发生问题的原因
shenyi0106 2011-03-22
  • 打赏
  • 举报
回复
拔掉网线,网络连接是肯定断掉了,之所以你还能够通讯,是因为系统底层没有检测到你断掉了,其实你的通讯是肯定会失败的(数据包是不会发出去的,也不会收到数据)

所以,一般都有个心跳包来处理这种事情,这也就是心跳包的由来。

备注:
1.系统宕机,蓝屏,断电等服务器也是检测不到客户端掉线的,需要心跳支持
1.UDP协议,没有测试过,不知道是否需要心跳支持
弱水垂钓 2011-03-22
  • 打赏
  • 举报
回复
应该是CAsyncSocket的一种机制吧
我习惯也只会用win socket api 来做网络开发
用select做socket状态判断,然后加业务代码
xiaoguailong3 2011-03-22
  • 打赏
  • 举报
回复
程序断网后,打开一个线程,一直查询网络状态,连上网后,关闭线程,连接服务器,最好定个协议,比如固定的ID号,这样好通信,知道这次登录的是谁,以前聊过天没,聊天记录等等!!!
  • 打赏
  • 举报
回复
大侠把话说的清楚点拜
xiaoguailong3 2011-03-22
  • 打赏
  • 举报
回复
断网了肯定是段开了,插上网线可以重新自动连接通信
  • 打赏
  • 举报
回复
我说的问题没有发心跳 在拔网线期间不进行send操作 插上网线就可以继续通信
  • 打赏
  • 举报
回复
虽然听起来特别的怪异 但是它确实存在着
zzz_zou 2011-03-22
  • 打赏
  • 举报
回复
你是一直发的吗 你心跳sleep没啊
如果你把网线拔了 那客户端和你通信的socket应该实效了啊 那么你还可以插上后继续通信?
  • 打赏
  • 举报
回复
心跳我原来 也跳过 通过timer线程 去发送 可是让我十分郁闷的是 程序执行几分钟之后,网络瘫痪了,除了我的程序能跑以外(外网和其他程序都不能通信了) 后来把心跳去掉了 就好了 直到现在对心跳都有心理阴影
  • 打赏
  • 举报
回复
回三楼 你没有仔细看我的贴 我说的是如果发送出现SOCKET_ERROR
但GetLastError不是WSAEWOULDBLOCK这个错误(也就是其他的错误) 是不是可以认为连接已经无效了
  • 打赏
  • 举报
回复
学习!
morebread 2011-03-22
  • 打赏
  • 举报
回复
前面的我不知道。不过我感觉是不正常的。
后面的通过send判断连接是否有效是可以的,心跳包就是这个机制的。
还有WSAEWOULDBLOCK不是表示连接无效,可以查看msdn上的介绍:

WSAEWOULDBLOCK
(10035)
Resource temporarily unavailable.
This error is returned from operations on non-blocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a non-fatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a non-blocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
hastings 2011-03-22
  • 打赏
  • 举报
回复
据说要用心跳包,其他的判断方法不顶用~~ ^_^
加载更多回复(9)
架设代理服务器方法教程全文共2页,当前为第1页。架设代理服务器方法教程全文共2页,当前为第1页。架设代理服务器方法教程 架设代理服务器方法教程全文共2页,当前为第1页。 架设代理服务器方法教程全文共2页,当前为第1页。 方法如下: 1、下载网络代理软件TGate。下载后得到文件列表。 2、设置端口和网速限制。在能上外网的电脑上双击TGate.exe打开主界面。设置Http协议端口和Socks协议端口,分别设置成80和443即可。网速限制依个人实际情况自己设定。设置完成后,点击左上角的保存图标保存。 3、设置访问用户。在"用户授权"选项卡中,设置"组名"和允许访问的"IP"就可以了。点击每个用户,在右边权限列表中设置。设置完成后,点击左上角的保存图标保存。 4、设置IE浏览器。在不能上网的电脑上在IE上依次打开"工具"-"Internet选项"-"连接"-"局域网LAN设置",如下图所示,填写代理服务器IP地址和端口号。设置完毕后,点击确定退出。 5、测试能否上网。在IE输入栏输入,回车后看看,是不是可以正常上网了?打开QQ登陆界面,点击设置打开"登陆设置"界面,设置网络类型为Http或Socks协议,地址和端口填写,其他项留空即可。点击"测试",提示成功即表示连接正常。确定后点击 登陆,是不是可以登陆QQ了? 补充:常见网络故障解决方法 ip地址冲突:ip地址冲突是局域网中经常出现的问题,有的用户可能重做系统或其他原因丢失自己的IP地址,在重新写IP的时候和其他人的IP地址一样导致ip地址出错,此时电脑右下角就会有个提示框提示你IP地址已经有人用。部门网管应该统计好部门人员的IP地址,当出现问题时可有资料可循,避免IP地址冲突。 计算机网卡故障,一般的主机网卡都带有网卡指示灯,网卡灯有两种类型,一种是只有单灯,一种是双灯。一般来说,单灯是绿色,而双灯一个是绿色,一个是橙色1000M网络,如黄色则是100MM网络。单灯显示的意思是,绿色灯亮表示网线物理连接正常。是常亮状态,在有数据交换时单灯情况下绿色灯会明暗闪烁。双灯情况下,绿色灯亮同样表示网线物理连接正常,是常亮状态,在有数据交换时橙色或黄色灯闪烁,而绿灯不变。查看网卡灯显示是否正常,可以判断网卡的好坏。拔掉网线网卡灯还显示正常,网卡出故障需要更换。 架设代理服务器方法教程全文共2页,当前为第2页。架设代理服务器方法教程全文共2页,当前为第2页。 网线有问题,如果网线在几台计算机上连接无反映,换根网线后正常,即可判断网线出了问题。网线一半问题有水晶头生锈造成短路,网线中间出现断路,水晶头没压好出现问题等。这时需要测线仪来检查网线。 架设代理服务器方法教程全文共2页,当前为第2页。 架设代理服务器方法教程全文共2页,当前为第2页。 测线仪使用方法,将一根网线两头分别差入测线仪的网线接口,查看对应各灯依次从1至8或8至1闪亮,再闪亮一次或两次某一灯即为该网线所在主机的路数,循环不止。 如果遇到整个网络出现问题,需要检查交换机是否出现问题,到交换机所在机房检查交换机是否有电,如果有电则检查连接交换机的trunk口灯是否正常,如果不正常找到上联交换机检查是否正常。有的交换机trunk口连接收发器,检查收发器是否正常。 相关阅读:计算机网络分层及其功能 物理层:利用传输介质为数链路层提供物理连接,实现比特流的透明传输。实现相邻计算机节点的比特流的透明传送,尽可能屏蔽掉传输介质和网路设备的差异。 数据链路层:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,将有差错的物理链路变为无差错的数据链路。 网络层:数据链路层的数据在这一层被转化为数据报,经过路径选择、分组组合、顺序、进/出路由等控制,将数据从一个网络设备转发到另一个网络设备。 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。向高层屏蔽下层数据信息的传输,向用户透明的传送报文。 会话层:组织和协调两个会话进程的通信,并对数据通信进行管理。 表示层:处理用户信息的表示问题,如编码,数据格式转换,加密解密等 应用层:完成网络中应用程序和操作系统之间的联系,建立和结束使用者之间的联系。 感谢您的阅读,祝您生活愉快。 架设代理服务器方法教程
交换机实验II 实验目的 1. 理解掌握环路对网络造成的影响,掌握环路的自检测的配置; 2. 理解路由的原理,掌握三层交换设备路由的配置方法 3. 掌握DHCP的原理以及其配置方法 实验步骤 配置交换机的IP地址,及基本的线路连接等; 实验1: .用独立网线连接同一台交换机的任意两个端口时期形成自环 . 对交换机的两个端口进行配置,开启所有端口的环路检测功能、设置检测周期等属性 实验2: .按图1方式对三层交换机的VLAN、端口进行配置 . 在交换机中分别对VLAN的IP地址进行配置 . 启动三层交换机的IP路由 . 设置PC-A、PC- B的IP地址,分别将它们的网关设置为所属三层交换机VLAN的IP地址 . 通过Ping验证主机A、B之间的互通状况 实验3: 三层交换机作为DHCP服务器,两台PC-A和PC- B,分别从交换机上获取IP地址。PC-C手动配置IP地址。 .按图2方式建立主机A、B、C与三层交换机间的连接,配置交换机的IP地址 . 配置三层交换机的DHCP地址池属性 . 启动DHCP服务 . (1)查看主机A、B能否正确的获取到给定范围内IP地址,通过Ping查看网关、交 换机之间的互通情况;(2)拔掉主机B的网线,将主机C的IP地址设置为主机B所 获取的到的IP地址,然后再上B机网线,查看其是否能获取到不同的IP地址; (3)分别重启主机A、B及交换机,查看A、B获取到的IP地址是否和前一次相同 。 " " " "图1. 三层路由连接图 "图连接图 " 实验结果 实验1:环路测试 交换机出现环路的自检测结果: 实验2:路由配置: 主机A连接交换机端口2,划分为vlan10,端口IP地址为。主机IP地址; 主机B连接交换机端口10,划分为vlan20,端口IP地址为。主机IP地址; 在未设置IP routing之前主机A、B分属于不同网段,因此它们不能互通,设置后通过路由则可相互联 通: 实验三:DHCP配置和验证: 主机A、B、C分别连接到交换机的端口2,端口18和端口10上。其中主机A、B的IP地址 自动获取,主机C的IP地址则手动配置。 主机A通过DHCP获取的IP地址() 主机B通过DHCO获取到的IP地址() 测试主机A与主机C的互通性(可连通) 测试主机B与主机A、C之间的互通性(可连通) 当主机C配置为主机B获取到的IP地址是会产生IP地址冲突的错误提示: 配置的主机C的IP地址与主机B的IP地址相冲突 主机B网线重新连接后获取到的新的IP地址 交换机重新启动后A、B主机自动获取到的IP地址信息: 主机A自动获取的IP地址 主机B自动获取的IP地址 DHCP可分配IP地址池内IP数目小于申请的主机数目时实验验证情况:(可分配的I P地址为 — ),此时连接主机A、B、C、D。 " " " 主机D自动获取IP地址的结果 实验与结果分析 环路问题: 分为第二层环路和第三层环路,所有环路的形成都是由于目的路径不明确导致混乱而 造成的。例如第二层,一个广播信息经过两个交换机的时候会不断恶性循环的产生广播 造成环路,而第三层环路则是原路由意外不能工作,造成路由通告错误,形成一个恶性 循环。传统的二层预防技术主要有STP(Spanning tree)来预防,STP在不断的修改和更新中,产生了诸如STP/RSTP/MSTP等多个版本,大家 可根据各自的组网规划来选择应用,但是STP的配置复杂度,以及协议本身的开销通常都 是网络管理人员比较头痛的事情。 解决因环路(自环或外环)对网络造成的影响,能够提高网络的自检错性、容错性和 健壮性。环路检测的过称为:对交换机的每个端口周期性的发送回路检测(Loopback- detection)数据包;交换机查看端口收到包的CPUMAC字段,如果其中存的是本交换机的 MAC,则本交换机的某些端口形成环路,否则将其丢弃,出现环路后,交换机会关闭端口 号较大的端口以消除环路。图1中反映了在交换机开启所有端口的环路检测功能后每隔3 0秒检测到的信息以及对端口的关闭等操作信息。 三层路由意义和工作过程: 实现不同VLAN间主机的通信,通过配置VLAN能够有效地控制广播域的大小。在同一V LAN内的主机间的通信不需要经过交换机的路由处理可直接到达目的主机,当不同VLAN间 通讯时,数据包先转发至路由器,由路由器查询其路由转发表选择正确的端口间数据包 转发到目的VLAN的交换机,再由目的VLAN内交换机将数据包转发至目的主机。其中扮演 主要角色的即为交换机的路由功能,如果没有设置相关属性则不同VLAN间不能通讯。 因此在图3的验证实验中,通过路由器的转发功能实现了分别位于VLAN10和VLAN20中 主机A、B之间的通信,在未配置IP Routing之前VLAN10和VLAN20分属

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧