一种基于TCP协议的点对点通信方法_第1页
一种基于TCP协议的点对点通信方法_第2页
一种基于TCP协议的点对点通信方法_第3页
一种基于TCP协议的点对点通信方法_第4页
一种基于TCP协议的点对点通信方法_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文章编号:100622475(2005 0920062203收稿日期:2005204204作者简介:黄焕(19772 , 男(壮族 , 广东湛江人, 湛江海洋大学航海学院助教, 硕士, 研究方向:数字通信和信号处理; 黄赞(19712 , 男, 广东湛江人, 湛江师范学院信息科技学院工程师、讲师, 硕士, 研究方向:机电控制与先进制造技术。一种基于TCP 协议的点对点通信方法黄焕1, 黄赞2(1. 湛江海洋大学, 广东湛江524000;2. 湛江师范学院, 广东湛江524022摘要:首先分析了基于UDP 协议和基于T CP 协议的点对点通信方式的不同之处, 并对两者进行了比较, 然后重点介绍了

2、一种采用多线程技术的、基于T CP 协议的点对点通信的方法。, 数据报的判断过程, 使程序更为简洁和稳定, 效率更高。关键词:UDP;T CP ; 点对点通信; 多线程中图分类号:TN915. 04;TP393文献标识码:AA Point 2to 2on TCP ProtocolHuan 1,H UANG Z an 2(,Z hanjiang 524000,China ; 2. Z hanjiang N orm al University ,Z hanjiang 524022,China Abstract :This paper analyzes the differences between

3、 point 2 to 2point communication methods based on UDP protocol and T CP protocol at first , and compares the tw o methods at the same time , then emphasizes to introduce a point 2to 2point communication method based on T CP protocol which adopts multi 2thread technique. This method guarantees the re

4、liability of data transmission efficiently , av oids the judgment for the mass data and makes the program m ore succinct , steady and efficiency. K ey w ords :UDP ;T CP ;point 2to 2point communication ;multi 2thread0引言随着计算机网络的普及, 通过网络进行信息交流成为人们日常生活的一部分, 为了保护自己的隐私, 通过网络进行点对点的通信显得非常重要。目前点对点实时通信的软件很多,

5、比如NetMeeting 、IPPhone 、MediaRing 等等, 这些软件都功能完善、相对独立, 但不利于集成到自己开发的软件中。有时为了把点对点通信的功能集成到自己开发的软件当中, 我们必须自己动手编制程序, 而选择基于何种协议的点对点通信方式, 是我们必须要考虑的问题。在TCP/IP 协议组中,TCP 是一种面向连接的协议, 为用户提供可靠的、全双工的字节流服务, 具有确认、流控制、多路复用和同步功能, 适于数据传输。UDP 协议则是无连接的, 每个分组都携带完整的目的地址, 各分组在系统中独立传送。它不能保证分组的先后顺序, 不进行分组出错的恢复与重传, 因此, 不保证传输的可靠

6、性。但是, 它提供高传输效率的数据报服务1, 大多数的点对点通信的软件都是基于UDP 协议的, 如PP 点点通等等。1基于U DP 协议的点对点通信方式的讨论在一些特定的场合下, 如某些模拟软件需要模拟电传通信和电话通信的过程, 双方要建立通信必须要完成请求通话和互换应答码的“握手”过程, 以及通信过程中存在“占线”问题, 即一旦线路连接, 其他终端对通信双方的呼叫都不能成功。通信结束后, 双方断开连接, 也需要信息交互, 如果采用基于UDP 协议的编程模型, 而且收发双方各自只设置一个s ocket , 则从建立通信线路, 互发数据到结束通信, 程序设计应能完成以下过程:(1 在请求通话时,

7、 必须发送“请求通话”数据报, 该数据报应包含“请求通话”报头, 对方收到后, 发回一个“确认”数据报, 表示同意建立呼叫, 这样双方才能建立通信。计算机与现代化2005年第9期J IS UAN J I Y U XI ANDAIH UA总第121期(2 在互发数据过程中, 为了模拟“占线”过程, 对其他终端发来的“请求通话”数据报, 通信双方都应拒绝, 即发“拒绝通话”数据报。(3 通信结束, 双方都应互发“断开连接”数据报。以上过程会带来如下弊端:(1 假设一个机房内共有36台终端机, 每台机之间的数据报来往非常多,UDP 协议又是无连接的, 不保证数据传输的可靠性, 这样很可能造成数据报丢

8、失。如果有一方发出“请求通话”数据报后, 为模拟“占线”过程, 它对其他终端的请求通话一律拒绝, 但被呼叫方的“确认”数据报由于在传输过程中丢失了, 则双方不能建立通信。这样, 往往就出现这台终端机看起来没有和其他终端机通信, 屡被拒绝。实际上, 认”, 而“确认”(2 们发“, 行处理, 即发“, 这样使程序的效率下降。(3 双方通信结束, 应互发“断开连接”数据报, 但若有一方收不到, 则使该方以为没有断线, 结果是其他终端机对他的“请求通话”数据报被拒绝。当然也可以采用收发双方都设置两个s ocket , 一个s ocket 负责发送“请求通话”数据报或接收“请求通话”数据报, 双方同意

9、建立通话后, 转到另外一个s ocket 上进行信息交流, 这样, 就可避免“拒绝”通话数据报的判断过程, 但是, 对“请求通话”数据报和“断开连接”数据报的丢失问题不能够很好地解决。2基于TCP 协议的点对点通信实现方法(1 收发双发都设置两个s ocket 。一个s ocket 是服务器型s ocket , 绑定本地地址, 监听对应的端口, 收到连接请求, 则与要求连接的客户端进行信息交流, 由于要模拟出“占线”的情况, 该服务器型s ocket 只能与一个客户端连接。另外一个s ocket 是客户端型s ocket , 在发射方进行呼叫时, 用connect (函数与接收方的服务器型s

10、ocket 连接, 由于要模拟出“占线”的情况, 在用connect (函数连接的同时, 应停止本方的服务器型s ocket 监听。(2 由于程序要对多个程序模块进行启动和停止的调度, 所以采用多线程技术。设置如下几个线程:连接线程、监听线程和新套接字收发线程, 具体的线程调度如图1所示。accept (函数接收到连接, 可利用该套接字与主叫方通信。原先用于监听的套接字必须要关闭, 否则重新启动监听线程时会出错。(4 由于双方在通信过程中, 停止了监听线程, 如果其他终端用connect ( 函数连接它们, 连接不通会返回错误信息, 则表明对方正在通话。(5 用VC +编制的程序关键代码如下:

11、服务器型s ocket 的监听线程:UI NT thread1(LPVOI D p . . .dlg ->msgs ock =accept (dlg ->s ock , (s ockaddr 3 &(dlg ->serv , &(dlg ->addlen ;/等待连接if (dlg ->msgs ock =I NVA LI D -S OCKET dlg ->m - edit. SetWindowT ext (Error accept ; else /如果接收到连接closes ocket (dlg ->s ock ;/若接收到连接后,

12、则关闭原先用于监听的套接字A fx BeginThread (&thread2,0 ;/启动新套接字收发线程A fxEndThread (0 ;/停止本方监听线程连接线程:UI NT thread (LPVOI D v . . .connect (dlg ->clis ock , (s ockaddr 3 &(dlg ->cli , sizeof (dlg ->cli ;/连接服务器端. . .closes ocket (dlg ->clis ock ;/断开连接后, 关闭s ocket A fx BeginThread (&thread1,0

13、;/重新启动本方监听线程A fxEndThread (0 ;/断开连接后, 则停止连接线程return 0; 新套接字收发线程:362005年第9期黄焕等:一种基于T CP 协议的点对点通信方法UI NT thread2(LPVOI D p . . .while (dlg ->s ! =S OCKET -ERROR /循环接收数据dlg ->s =recv (dlg ->msgs ock ,bu ff ,100,0 ; dlg ->SetF oregroundWindow (; if (dlg ->s ! =S OCKET -ERROR dlg ->m -l

14、ist. InsertItem (dlg ->count +,bu ff ; dlg ->m -list. Scroll (size ; closes ocket (dlg ->msgs ock ;/若对方断开连接, 则关闭用于收发数据的s ocketA fx BeginThread (&thread1,0 ;/s 的监听线程A ( /3结束语(1 以上程序在Windows 2000和Windows XP 环境下全部运行通过。(2 由于该程序巧妙地运用了多线程技术, 使得各个程序模块的调度非常自如, 可以使用相关函数在线程内部停止线程, 也可以在线程外部利用相关函数启

15、动线程。(3 采用基于TCP 协议的编程方法, 有效地保证了数据传输的可靠性, 避免了对基于UDP 协议的程序设计中所使用的大量数据报的判断过程, 使程序更为简洁和稳定, 效率更高, 同时可以利用各种出错信息来判断是“占线”还是“拆线”, , 协议的语音聊天系统的设 ,2002,23(12 :5860. , 钟军, 等. Visual C +网络通信协议分析与应用实现M.北京:人民邮电出版社,2003. 3林晓. 多线程在网络程序设计中的应用J.华侨大学学报,1999,20(3 :308311. 4冯美霞. 多线程应用程序的同步技术J.计算机应用,1999,19(6 :2426.(上接第61页

16、 交换机计数器为Pentium Pro TSC ,5ns 。终端的计数器通过调用gettimeofdata ( 函数获得(精确度为毫秒级 。图1算法性能评估网络模型故障恢复各阶段所要的时间如表1所示。表1故障恢复各阶段所花费时间表故障恢复时间中断连接连接处理95ns/连接信息帧传输2s/帧+信息帧传输时间生成树重建SP 恢复计时器30ms信息帧处理(SP 、EP 、CP 35ns/帧、20ns/帧、15ns/帧信息帧传输2s/帧+信息帧传输时间重建连接总开销814ms/连接(终端 、0. 10. 6ms/连接由表1可知,SP 阶段恢复计时器所需的时间占主要部分, 其他各部分与之相比都很小, 都

17、为微秒和纳秒级, 可以不计。所以本算法总的延迟大约为180ms , 远远小于IEEE 802. 1D 的延迟(大于30s , 满足工业控制的要求。参考文献:1T im Boyles ,Dave Hucaby. S witchingM.Cisco Press ,2000. 2Andrew S T anebaum. 计算机网络(第3版 M.北京:清华大学出版社,1998.3T odd Lammle ,K evin Hales. CC NP S witching S tudy G uideM.Sybex Press ,2000.4G ilbert Held. 以太网(第3版 M.北京:人民邮电出版社,1999.5Srinidhi Varadarajan , T zi 2cker Chiueh. Fault Recovery in a Re 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论