没有合适的资源?快使用搜索试试~ 我知道了~
论文研究-一种带有断开恢复功能的Socket通信方法.pdf
需积分: 0 1 下载量 110 浏览量
2019-07-22
18:36:04
上传
评论
收藏 66KB PDF 举报
温馨提示
试读
4页
Socket是UNIX平台上网络编程的基础,Socket API提供了进程之间的通信功能,但如果通信的一方发生故障重新启动,通信连接就会断开,应用层必须显式地重新建立连接才可以继续通信。对传统Socket通信机制进行了综合分析,在保证效率的前提下,提出了一种新型的Socket通信方法。采用这种方法,可以为分布在网络上不同主机上的进程间通信提供具有故障恢复能力的可靠通信。
资源推荐
资源详情
资源评论
收稿日期: 2004-10-23; 修返日期: 2004-11-25
基金项目: 国家“863”计划 资助 项目 ( 2002AA121012) ; 国 家自
然科学基金资助项目( 90204007)
一 种 带 有 断 开 恢 复 功 能 的 Socket 通 信 方 法
*
薛海强, 苏 森
( 北京 邮电 大学 交 换技 术与 通信 网国家 重点 实验 室, 北 京 100876)
摘 要: Socket是 UNIX 平 台 上网 络 编程 的基 础, Socket API 提供了 进程 之间 的 通信 功能 , 但如 果 通信 的 一方 发
生故 障重 新启 动, 通信 连接 就会 断开, 应 用层 必须显 式 地 重新 建 立 连 接 才可 以 继 续 通 信。 对 传 统 Socket 通 信 机
制进 行了 综合 分析, 在 保证 效率 的前提 下, 提 出了一 种新 型的 Socket通信 方法 。采 用这 种方 法, 可以 为 分布 在 网
络上 不同 主机 上的进 程间 通信 提供 具有 故障 恢复 能力 的可 靠通信 。
关键 词: Socket; 网 络通 信; 自 动重 连
中图 法分 类号 : TP393. 04 文 献标 识码 : A 文 章编 号: 1001-3695( 2005) 10-0236-04
A Socket Communication Method with Disconnection Restoration
XUE Hai-qiang, SU Sen
( National Key Laboratory of Switch Technology & Telecommunication Networks, Beijing University of Posts & Telecommunications, Beijing 100876,
China)
Abstract: Socket is the base of UNIX platform network programming, it provides the interprocess communication function,
but, if one of the communication parts restores frommalfunction, the socketconnection will be disconnected and the upper ap-
plication layer must reconnect explicitly to set up the socket connection again. In this paper, the disconnection exceptions of
socket communication are analysed, furthermore a novel mechanism of socket communication is proposed. This method pro-
vides the disconnection tolerance for interprocess communication.
Key words: Socket; Network Communication; Auto-reconnect
1 引言
UNIX/Linux 系统的 Socket API 提 供 了 基 于 TCP/IP 协 议
的网络编程接口, 使得应用程序可以采用类似于文件操作的方
式通信。UNIX 系统提 供了 四种 类型 的 Socket, 分别 是 Stream
Socket( 流 套 接 字 ) 、Datagram Socket ( 数 据 报 套 接 字 ) 、Raw
Socket( 原始套接字) 和 Domain Socket( 本地套接字) 。在网络
编程中, 应用最多的是 Stream Socket。本文中的网络 通信采用
StreamSocket。
在 UNIX/Linux 系 统中, 两 个物理 实体 之间 的网 络 Socket
通信采用 客 户-服务 器 ( Client-Server) 的方 式。客 户端 的 工 作
流程是: 创建 Socket 、连接 服务 端、传 输数 据、关 闭连 接; 服 务
端的工作流程是: 创建 Socket、绑定监听 端口、建立监听队 列来
监听连接请求、接收连接请求、传输数据、关闭连接
[ 1]
。
UNIX/Linux 系统中 Socket API只 提供了 正常情 况下两 个
程序( 可在相同或不同机器上) 之间可 靠的通 信机制 , 对于 异
常情况 下 的 通信, UNIX/Linux 系 统并 没 有 提供 太 好 的办 法。
设想在两个程序( 下面为了 便于说 明用 A 程序 和 B程 序来 表
示) 中建立 Socket连接之 后, A, B程 序中 分别 有一 个与 Socket
连接相对应 的文件描述 符, 由于 B程 序( 或 A 程序) 出现 故障
( 如程序异常结束) 后, 又重新启 动, A 程序并 不知道 对方程 序
已经重新启动了, 如 果此 时 A 程序在 原 来的 Socket 连接 上 传
输数据, 就会导致程序异常。对于这种异常, UNIX 系统缺省的
响应是向应用程序发送 SIGPIPE 信号, 如果应用程序中没有 设
置此信号的处理函数, 那么应用程序将会异常结束。
针对上述情况, 我们可以在应用程序中采取一些措施来弥
补这种缺陷。例如, 如果是客户端程 序 A 重新启 动了, A 程 序
在初始化过程中, 主动重新 向服务 端发起 连接请 求; 同时服 务
端收到从 A 程序发出的新 连接 请求后, 删 除与 A 程序 的旧 连
接, 这样就可以解决客户端程序重新启动的问题。如果服务器
端程序由于故障重新启动, 情况 就复杂多了, 由于 UNIX/Linux
系统中的 Socket通信机制中, 服务端是被动等待客户端向它发
起连接, 如果服务端重新启 动, 客户端 不知道 服务端 的程序 已
重新启动了, 将不会向服务端发起连接, 由于没有有效连接, 服
务端就不可能向客户端发 送数据。目 前比较 常见的 方法是 在
客户端定期向服务端发送带外数据来检测服务器端状态, 如果
在一定时间内客户端没有收到服务端的响应, 客户端就删除原
来的连接, 向服务端发起新的连接; 如果连接请求失败, 就定期
重复发送连接请求, 直到连接建立成功为止。这种定期检测连
接有效性的方法在客户端与服 务器之 间通信 的实时 性要求 不
高的情况下是可行的, 但当客户端程序与服务器端程序之间通
信的实时性要求比较高时, 就需要在客户端专门有一个线程以
足够高的频率向服务端发送带外数据, 检测 Socket连接状态是
否可用, 这在大型的分布式 系统中 将花费 很多的 系统资 源, 在
对性能 要 求 比 较 高 的 场 合 下 甚 至 是 不 可 行 的。 另 外, 关 于
Socket在异常情况下的处理, 涉及到 Socket编程 比较深入的 部
·632· 计算机应用研究 2005 年
资源评论
weixin_39840650
- 粉丝: 409
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于CSS的响应式鲜花网站全屏效果设计源码
- 基于JavaScript的访客预约系统设计源码
- 基于Vue和ECharts的工作租房数据可视化系统设计源码
- 1040g0cg310ravpiu6ibg5pg00tsipsln3ju2d0g 2
- 基于Python的SAR图像去噪CNN-NLM设计源码
- redhat6升级到redhat7,过程redhat6.x-> redhat6.10->rehat7.9 主版本最高版本
- 基于Django的流程引擎设计源码
- 基于Node.js的Express框架与MySQL的后台管理系统设计源码
- 基于Java的Flink流批一体数据处理快速集成开发框架设计源码
- FirstFilterOrderCompare
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功