CN102413133B - 一种时间可控的客户端服务器传输方法 - Google Patents
一种时间可控的客户端服务器传输方法 Download PDFInfo
- Publication number
- CN102413133B CN102413133B CN201110364294.2A CN201110364294A CN102413133B CN 102413133 B CN102413133 B CN 102413133B CN 201110364294 A CN201110364294 A CN 201110364294A CN 102413133 B CN102413133 B CN 102413133B
- Authority
- CN
- China
- Prior art keywords
- client
- server
- socket
- data
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种时间可控的客户端服务器传输方法,在客户端和服务器操作中,将每个操作函数分为阻塞函数和非阻塞函数,为客户端和服务器连接过程中的阻塞函数创建独立的等待线程,对于发送和接收函数,设置一个超时重连参数。
Description
技术领域
本发明涉及数据传输,具体来说,涉及一种时间可控的客户端服务器传输方法。
背景技术
大部分网络协议的实现都由客户端和服务器端来协作完成。这种模型本质上涉及两个不同的程序,通常这两个程序在不同机器上运行。这些机器之间都有网络连接,服务器端程序提供服务并对来自客户程序的请求做出响应,而客户端程序则是在使用者和服务器端程序之间建立某种沟通的渠道,或者是作为使用服务器提供的某种网络服务的工具。一个典型的服务器与客户端之间的交互可能如下所示:
客户端发出一个请求;
服务器收到客户端的请求,进行分析处理;
服务器将运行处理的结果返回给客户端。
通常一个服务器需要向多个客户端提供服务,因此对服务器来说,还需要考虑如何有效地处理多个客户的请求。
Socket的连接类型可以分为两种,分别是面向连接的字节流类型和面向无连接数据报类。面向无连接数据报类型的Socket工作流程比较简单,双方不需要进行太多的沟通与交互,客户端直接将用户的请求打包发送到服务器端,省略了建立一个固定信息通道的过程,服务器端也是直接将处理的结果发送给客户端,每个发送的数据报都携带有传递所需要的所有地址信息;面向连接的字节流类型的Socket工作中有比较严格的操作次序,工作的原理也比较复杂。在这种类型的Socket的工作过程中.必须首先启动服务器端,通过调用Socket()函数建立一个Socket对象,然后调用Bind()函数将该Socket对象和本地网络地址绑定到一起。再调用Listen()函数使该Socket对象处于侦听状态,并规定它的最大请求的数量,其工作流程如图1所示。总的来说,无连接和面向连接的通信方式各有长处和短处,在仅仅涉及少量的信息传递的场合可以使用无连接操作,如果涉及大量信息传递的场合可以采用面向连接操作。
发明内容
为解决上述问题,本发明提供了一种时间可控的客户端服务器传输方法。
一种时间可控的客户端服务器传输方法,在客户端和服务器操作中,将每个操作函数分为阻塞函数和非阻塞函数,为客户端和服务器连接过程中的阻塞函数创建独立的等待线程,对于发送和接收函数,设置一个超时重连参数。
优选的,所述等待线程在创建后,连接过程中的主线程可以继续执行其它操作。
优选的,所述发送和接收函数无论是否成功都会在超时重连参数时间之内做出返回。
优选的,所述操作封装成lib库的形式提供给用户,包括客户端和服务器端两部分。
优选的,所述服务器端的lib库包括:
服务器初始化库,用于初始化服务器端运行环境,输入参数为IP地址、端口,执行的操作为创建一个socket、绑定到指定地址和端口、设置侦听,另外专门创建一个新的线程来等待客户端的连接;如果整个过程没有错误则返回给用户新创建的socket,如果出错则通知用户出错的地方和原因;
服务器发送库,用于发送数据到指定客户端,输入参数为socket句柄、数据缓冲区地址和大小、timeout;该函数采用非阻塞方式循环发送数据,一旦超过timeout时间则终止发送,并通知用户;否则一直尝试发送缓冲区数据到指定客户端;
服务器接收库,用于从客户端收取数据,输入参数为socket句柄、接收缓冲区地址和大小、timeout;该函数采用非阻塞方式循环接收数据,一旦超过timeout时间则终止接收过程,并通知用户;否则一直尝试从指定客户端接收数据;
服务器中止库,用于终止整个运行环境,输入参数为socket句柄,该函数关闭socket连接并终止之前建立的线程,整个过程没有阻塞操作。
优选的,所述客户端的lib库包括:
客户端初始化库,用于初始化客户端运行环境,输入参数为服务器端的IP地址、端口、timeout,执行的操作为创建一个socket,并用此socket连接服务器端,连接过程是非阻塞的,尝试时间超过用户指定的timeout后不再尝试,而是返回给用户具体的出错原因,等待用户的进一步动作;
客户端发送库,用于发送数据到指定客户端,输入参数为socket句柄、数据缓冲区地址和大小、timeout;该函数采用非阻塞方式循环发送数据,一旦超过timeout时间则终止发送,并通知用户;否则一直尝试发送缓冲区数据到指定客户端;
客户端接收库,用于从客户端收取数据,输入参数为socket句柄、接收缓冲区地址和大小、timeout;该函数采用非阻塞方式循环接收数据,一旦超过timeout时间则终止接收过程,并通知用户;否则一直尝试从指定客户端接收数据;
客户端中止库,用于终止整个运行环境,输入参数为socket句柄,该函数关闭socket连接,整个过程没有阻塞操作。
附图说明
图1是面向连接的客户端服务器模型
图2是服务器端与客户端完整执行流程
具体实施方式
本发明将传输双方分别称为服务器端和客户端,服务器端首先建立Socket环境,创建独立线程等待客户端连接;客户端事先知道服务器端的地址,本地Socket环境建立以后即向服务器端发出建立连接的请求;连接建立以后双方可以互相发送数据直到Socket关闭。以上过程的关键是在所有的执行点都需要消除阻塞的影响,任何调用都可以在设定的时间内返回,用户可以根据返回值来判断下一步的动作。下面分别针对服务器端和客户端给出解决方法:
服务器端。Socket()、Bind()和Listen()都是标准的非阻塞函数,不需要做特别的操作即可满足需求;但是Accept()是典型的阻塞函数,执行后会一直等待客户端的连接而不返回,除非客户端连接的到来,这里采用的解决方法是创建一个独立的等待线程来执行Accept()函数的操作,这样主线程可以无阻塞地执行其他操作;建立连接后,服务器端会接收从客户端发来的数据,也会向客户端发送数据,这两个操作都可能阻塞,对于Recv()函数,本发明封装此函数,给调用者提供另外一个timeout参数,使得本操作无论接收成功与否都会在timeout时间内返回,对于Send()函数也做类似操作。
客户端。Socket()是标准的非阻塞函数,不需要做特别的操作即可满足需求;Connect()需要设置建立的socket为非阻塞模式,然后根据用户设定的时间来尝试多次连接,如果在限定的时间内未连接成功则返回用户具体的不成功的原因;发送和接收操作参考服务器端的设计即可。
本发明将所有的操作封装成lib库的形式提供给用户,分为服务器端和客户端两部分:
服务器端的接口:
Server_Init()——初始化服务器端运行环境,输入参数为IP地址、端口等,执行的操作为创建一个socket、绑定到指定地址和端口、设置侦听,另外专门创建一个新的线程来等待客户端的连接。如果整个过程没有错误则返回给用户新创建的socket,如果出错则通知用户出错的地方和原因。
Server_Send()——发送数据到指定客户端,输入参数为socket句柄、数据缓冲区地址和大小、timeout等。本函数采用非阻塞方式循环发送数据,一旦超过timeout时间则终止发送,并通知用户;否则一直尝试发送缓冲区数据到指定客户端。
Server_Recv()——从客户端收取数据,输入参数为socket句柄、接收缓冲区地址和大小、timeout等。本函数采用非阻塞方式循环接收数据,一旦超过timeout时间则终止接收过程,并通知用户;否则一直尝试从指定客户端接收数据。
Server_Stop()——终止整个运行环境,输入参数为socket句柄,本函数关闭socket连接并终止之前建立的线程,整个过程没有阻塞操作。
客户端的接口:
Client_Init()——初始化客户端运行环境,输入参数为服务器端的IP地址、端口、timeout等,执行的操作为创建一个socket,并用此socket连接服务器端,连接过程是非阻塞的,尝试时间超过用户指定的timeout后不再尝试,而是返回给用户具体的出错原因,等待用户的进一步动作。
Client_Send()——同Server_Send()。
Client_Recv()——同Server_Recv()。
Client_Stop()——终止整个运行环境,输入参数为socket句柄,本函数关闭socket连接,整个过程没有阻塞操作。
服务器端与客户端完整执行流程如图2所示。
Claims (2)
1.一种时间可控的客户端服务器传输方法,其特征在于:在客户端和服务器操作中,将每个操作函数分为阻塞函数和非阻塞函数,为客户端和服务器连接过程中的阻塞函数创建独立的等待线程,对于发送和接收函数,设置一个超时重连参数;
所述等待线程在创建后,连接过程中的主线程可以继续执行其它操作;
所述操作封装成lib库的形式提供给用户,包括客户端和服务器端两部分;
所述服务器端的lib库包括:
服务器初始化库,用于初始化服务器端运行环境,输入参数为IP地址、端口,执行的操作为创建一个socket、绑定到指定地址和端口、设置侦听,另外专门创建一个新的线程来等待客户端的连接;如果整个过程没有错误则返回给用户新创建的socket,如果出错则通知用户出错的地方和原因;
服务器发送库,用于发送数据到指定客户端,输入参数为socket句柄、数据缓冲区地址和大小、timeout;该函数采用非阻塞方式循环发送数据,一旦超过timeout时间则终止发送,并通知用户;否则一直尝试发送缓冲区数据到指定客户端;
服务器接收库,用于从客户端收取数据,输入参数为socket句柄、接收缓冲区地址和大小、timeout;该函数采用非阻塞方式循环接收数据,一旦超过timeout时间则终止接收过程,并通知用户;否则一直尝试从指定客户端接收数据;
服务器中止库,用于终止整个运行环境,输入参数为socket句柄,该函数关闭socket连接并终止之前建立的线程,整个过程没有阻塞操作;
所述客户端的lib库包括:
客户端初始化库,用于初始化客户端运行环境,输入参数为服务器端的IP地址、端口、timeout,执行的操作为创建一个socket,并用此socket连接服务器端,连接过程是非阻塞的,尝试时间超过用户指定的timeout后不再尝试,而是返回给用户具体的出错原因,等待用户的进一步动作;
客户端发送库,用于发送数据到指定客户端,输入参数为socket句柄、数据缓冲区地址和大小、timeout;该函数采用非阻塞方式循环发送数据,一旦超过timeout时间则终止发送,并通知用户;否则一直尝试发送缓冲区数据到指定客户端;
户端接收库,用于从客户端收取数据,输入参数为socket句柄、接收缓冲区地址和大小、timeout;该函数采用非阻塞方式循环接收数据,一旦超过timeout时间则终止接收过程,并通知用户;否则一直尝试从指定客户端接收数据;
客户端中止库,用于终止整个运行环境,输入参数为socket句柄,该函数关闭socket连接,整个过程没有阻塞操作。
2.如权利要求1所述的方法,其特征在于:所述发送和接收函数无论是否成功都会在超时重连参数时间之内做出返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110364294.2A CN102413133B (zh) | 2011-11-17 | 2011-11-17 | 一种时间可控的客户端服务器传输方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110364294.2A CN102413133B (zh) | 2011-11-17 | 2011-11-17 | 一种时间可控的客户端服务器传输方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102413133A CN102413133A (zh) | 2012-04-11 |
CN102413133B true CN102413133B (zh) | 2014-07-02 |
Family
ID=45914983
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110364294.2A Active CN102413133B (zh) | 2011-11-17 | 2011-11-17 | 一种时间可控的客户端服务器传输方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102413133B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102938783A (zh) * | 2012-10-30 | 2013-02-20 | 中兴通讯股份有限公司 | 一种Socket处理方法、装置和Web服务器 |
CN104601523B (zh) * | 2013-10-31 | 2019-02-22 | 腾讯科技(深圳)有限公司 | 一种传输数据的方法及装置 |
CN105681930A (zh) * | 2016-01-12 | 2016-06-15 | 深圳羚羊极速科技有限公司 | 与流媒体服务器建立快速的tcp连接方式 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004042571A2 (en) * | 2002-11-06 | 2004-05-21 | Roberto Della Pasqua | A communication method with reduced response time in a distributed data processing system |
CN1672381A (zh) * | 2002-07-24 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 防止在进程中长期超时 |
CN101119392A (zh) * | 2007-08-21 | 2008-02-06 | 南京联创科技股份有限公司 | Socket统一接入的方法 |
-
2011
- 2011-11-17 CN CN201110364294.2A patent/CN102413133B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1672381A (zh) * | 2002-07-24 | 2005-09-21 | 皇家飞利浦电子股份有限公司 | 防止在进程中长期超时 |
WO2004042571A2 (en) * | 2002-11-06 | 2004-05-21 | Roberto Della Pasqua | A communication method with reduced response time in a distributed data processing system |
CN101119392A (zh) * | 2007-08-21 | 2008-02-06 | 南京联创科技股份有限公司 | Socket统一接入的方法 |
Non-Patent Citations (6)
Title |
---|
刘冬.网络超时在Java 程序中的处理.《微型电脑应用》.2004,第20卷(第10期),第53-54页. |
周凤石.基于非阻塞模式的多客户网络通信的研究.《沙洲职业工学院学报》.2006,第4-7页. |
周谭凯,马玉祥.网络通信编程架构研究.《电子科技》.2005,第58-59页,图2. * |
基于非阻塞模式的多客户网络通信的研究;周凤石;《沙洲职业工学院学报》;20060330;全文 * |
夏玲,王伟平.客户端与服务器端的Socket通信.《电脑知识与技术》.2009,第812-813页. * |
网络超时在Java 程序中的处理;刘冬;《微型电脑应用》;20041020;第20卷(第10期);第53-54页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102413133A (zh) | 2012-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101521683B (zh) | 一种网络游戏系统及其接入方法、客户端通讯方法 | |
CN108494817A (zh) | 数据传输方法、相关装置及系统 | |
CN102413133B (zh) | 一种时间可控的客户端服务器传输方法 | |
CN101202704A (zh) | 一种数据的传输方法及系统 | |
WO2017028399A1 (zh) | 通信数据传输方法及系统 | |
CN104702627A (zh) | 一种基于报文分类的同步并发通信方法及系统 | |
CN102752188A (zh) | 一种传输控制协议连接迁移方法及系统 | |
CN103297384A (zh) | 协议转换的通信方法及系统 | |
CN103546493A (zh) | 一种跨设备通信方法 | |
CN110460623A (zh) | 一种针对工业控制通用协议的处理系统、方法及终端 | |
CN101707622A (zh) | 实现远程数据监控的方法 | |
CN101741747A (zh) | 面向udp协议的nfs流控方法 | |
CN103873474B (zh) | 基于Windows的TCP/IP协议的网络传输方法 | |
CN104683460A (zh) | 一种物联网的通信方法、装置及服务器 | |
CN101958919A (zh) | 一种基于非ip数据隧道的多文件并行传输方法及系统 | |
CN101841477A (zh) | 一种提高网络控制芯片可靠报文传输信用的方法 | |
EP3009931A1 (en) | Electronic device for internet protocol communications | |
EP1575236B1 (en) | Connectivity confirmation method for network storage device and host computer | |
CN102523122A (zh) | 广域网终端设备远程管理方法及管理装置 | |
CN101155177B (zh) | 基于共用协议的数据通道共享系统及方法 | |
CN106331051A (zh) | 文件传输方法和系统以及接收文件装置、发送文件装置 | |
CN105162751B (zh) | 一种基于lwIP协议栈多网口多连接的通讯系统 | |
CN105516215B (zh) | 异步调用方法和装置 | |
CN106973065A (zh) | 一种服务器事件处理系统及方法 | |
CN102255895A (zh) | 客户端和服务端之间的数据通信方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220729 Address after: 100193 No. 36 Building, No. 8 Hospital, Wangxi Road, Haidian District, Beijing Patentee after: Dawning Information Industry (Beijing) Co.,Ltd. Patentee after: DAWNING INFORMATION INDUSTRY Co.,Ltd. Address before: 100084 Beijing Haidian District City Mill Street No. 64 Patentee before: Dawning Information Industry (Beijing) Co.,Ltd. |