文件传输协议范文通用5篇

发布时间:

这里是漂亮的小编给家人们找到的文件传输协议范文通用5篇,欢迎参考阅读,希望大家能够喜欢。

文件传输协议 篇1

关键词:流媒体;服务迁移;视频传输

中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2013)09-2233-03

流媒体(streaming media),采用流式传输的方式在因特网与内联网播放的媒体格式。流媒体又叫流式媒体,它是用一个视频传送服务器把节目当成数据包发出,传送到网络上。然后通过解压设备对这些数据进行解压后,节目就会像发送之前那样的显示出来了。流媒体技术也不是一种单一的技术,它是将网络技术及视/音频技术的有机结合。在网络上实现流媒体技术,需要解决流媒体的制作、、传输及播放等多方面的问题。在网上进行流媒体传输的文件必须制作成适合流媒体传输的流媒体格式文件。因为我们通常格式存储的多媒体文件容量很大,假使要在现有的窄带网络上传输,就会花费很长的时间,如果遇到网络繁忙,还可能会造成传输中断。另外,通常格式的流媒体也不能按流媒体传输协议进行传输。因此,应首先对需要进行流媒体格式传输的文件进行预处理,将文件压缩生成流媒体格式文件。但是在处理过程中应注意两点:一是选用适当的压缩算法进行压缩,这样可以生成较小的文件容量。二是需要向文件中添加流式信息。

为了实现上述的解决方法,该文设计和实现了一个流媒体系统,利用RTP(实时传输协议) 作为流媒体传输协议,并且以SIP(应用层的信令控制协议)来作为服务器和客户端之间信息传输的传输协议。而且为了让使用者在服务器和服务器之间的切换过程中不会察觉到视频有停顿或是画面有噪声的情形发生, 则必须要能够达到无缝切换(Seamless Handoff)的程度。

本文研究结合了SIP 和RTP协议,设计出了基于服务迁移的流媒体系统。结果降低了包的延迟,增加了连接质量,减少了整体网络的负担利用RTP 作为流媒体传输协议,并且以SIP 来作为服务器和客户端之间信息传输的传输协议。而且为了让使用者在服务器和服务器之间的切换过程中不会察觉到视频有停顿或是画面有噪声的情形发生,则必须要能够达到无缝切换(Seamless Handoff)的程度。

1 流媒体传输原理

我们都知道,在网络上实现流媒体技术是一个复杂的过程,因而当在网络上实现流媒体技术时,我们必须对其进行综合的考虑和分析,这就需要囊括制作、传输、、播放等多方面的问题。当数据在传输时,我们应尽量选择合适的传输协议,虽然TCP协议是一种可靠的数据传输协议, 但是TCP协议需要的带宽开销加大,在那些实时性要求比较高的时候,TCP协议有可能花费相对较高,这样就极其不合算,因此TCP协议并不适合实时性要求高的场合,这样一来,在实际的传输中,我们就采用效率更高的RTP/UDP协议。

对于流式传输的理解,目前存在有很多种说法,最流行的一种说法就是,流式传输主要指通过网络传送多媒体信息(音视频)的总称。实现流式传输的两种方法:1. 实时流式传输(Realtime Streaming);2. 顺序流式传输(Progressive Streaming)。通常来说,如果视频为实时广播,或者采用流式媒体服务器,或者采用RTSP实时协议,则为实时流式传输; 如采用HTTP服务器,则为顺序流式传输。采用何种方式,应据实用场合而定。当然,流式文件也支持缓冲到硬盘,支持流文件下载的下载器也有很多种,比如迅雷就是一个很好是事例;另外,更有甚者,可以将文件路径反解析出来,比如http:///. 用户只需要输入流媒体的地址,就能反解析到实际的媒体文件地址,然后点击右键的另存为,就圆满的完成了整个任务。目前有很多公司都会封掉流媒体服务,而采用此方法,直接将流媒体浏览变为http文件传输,将直接绕开公司防火墙。

2 流媒体传输系统的设计

为了验证该文所提出的方法是否可行,我们设计和实作了一个流媒体系统来作简单的实验,整个系统包含了客户端以及服务器二个部分。客户端和服务器之间信令传输的传输协议为SIP,流媒体的传输协议为RTP。而程序主要的功能如下︰

1)用户经由客户端的软件连上服务端,在线观看想看的视频。

2)客户端软件会监视网络的状况(如包延迟时间、网络壅塞状况等)。当使用者四处漫游时,可能会使的和服务器之间的距离加大,导致连接品质变差,这时候客户端会自动的去和目前连接的服务器要求作服务迁移(Service Migration)的动作。

3)服务器收到客户端的要求后,会将相关的资料(如多媒体名称、播放进度、RTP 状态信息等)传送给客户端,客户端再将收到的资料传送给较近的服务器,改由较近的服务器来服务。

负责和服务端之间的信令往来, 以及管理Draw_Frame_Thread 和Rtp_Recv_Thread。分成二个部分:第一部份是基本的建立连接部分(不含服务迁移)。第二部分是服务迁移的过程。图1为流程图。

客户端连接到服务器,服务器目前不忙碌,产生子程序服务该客户端,并传送重新导向的信息给客户端。客户端收到后重新连接到该子程序,该子程序有找到客户端所要求的视频片段,并传送该视频的相关信息(如视频的高度、宽度、色彩深度、长度、帧数数等)给客户端,到此就算连接建立成功。客户端收到后,启动Rtp_Recv_Thread 和Draw_Frame_Thread,准备开始播放。开始播放后,使用者便可作基本的操作,如暂停、继续、结束、缩小或放大、服务迁移等。而连接失败的话,使用者可以重新输入,改连接到其他服务器或其他视频。

3 流媒体传输系统的实现

图2为程序实际执行的快照。共有三台计算机参与实验,二台负责服务器部分,一台负责客户端部分。我们在负责客户端的计算机上利用操作系统内附的远程连接程序,连接到那二台服务器来作控制和显示。在图2中,左上的远程连接窗口为服务器A(IP为140.127.112.12),而窗口内执行的程序为Main。左下的远程连接窗口为服务器B(IP为140.127.112.96),窗口内执行的程序为Main。右边中间为客户端程序(IP为140.127.112.118),上面为信息窗口,下面为播放器窗口。而程序的整个执行流程为:

1)客户端会先连接到服务器A。

2)过一段时间后迁移到服务器B,这时服务器A 和服务器B 会同时传送资料给客户端。

3)再过一段时间后客户端切断与服务器A 的连接,这时就剩下服务器B 与客户端连接。

4)最后视频传送完毕,服务器B 切断与客户端的连接。

4 总结

该文设计和实现了一套无线网络流媒体播放系统,并对服务器模块、客户端模块、以及传输模块进行了设计。实验证明系统有较好的网络适应性,并能获取良好的视觉质量。

参考文献:

[1] 季尉,丘洪江,肖振华,等。 CDN和P2P融合的流媒体内容分发平台[J].音响技术,2010(2).

[2] 马军,郑烇,殷保群。 基于CDN和P2P的分布式网络存储系统[J].计算机应用与软件,2010(2).

文件传输协议 篇2

IEC60870-5-104协议(以下简称104协议)是国际电工委员会在IEC60870-5-101协议的基础上,为适应网络传输而制定的远动通信协议。它不仅可以应用在集控中心与变电站、集控中心与调度端,而且完全适用于变电站内的通信网。104协议在物理层、链路层、网络层、传输层采用RFC2200协议。RFC2200是标准的TCP/IP协议子集,因此104协议适合在基于TCP/IP协议的高带宽网络上传输。104协议最大优点是具有实时性好、可靠性高、数据传输流量大、便于信息扩展、支持网络传输等特点。104协议在应用层采用APCI(应用协议控制信息)传输接口(见图3)。根据APCI控制域格式,104协议报文有3种类型:用于编号的信息传输(I格式)、编号的监视功能(S格式)和未编号的控制功能(U格式)。I格式帧:控制域第1个八位位组组的第一位比特=0。I格式的APDU包含1个ASDU(应用数据服务单元)。S格式帧:控制域第1个八位位组的第1个比特位=1,且第2个比特位=0。S帧只包括APCI。U格式帧:控制域第1个八位位组的第1个比特位=1,且第2个比特位=1。U帧也只包括APCI。104协议通过发送序号N(S)和接收序号N(R)机制来防止报文的丢失和报文的重复。当通信双方建立连接后,双方开始数据传输。发送方每发送1个I格式报文,其发送序号加1,接收方每接收到一个与其接收序号相等的I格式报文后,其接收序号也加1。接收方通过比较接收到的I格式报文发送序号N(S)与自己的接收序号R(S)是否相等来判断是否存在报文丢失或重传的情况。当接收方收到发送序号大于自己接收序号的I格式报文时,意味着报文在经过网络传输时存在丢包。当接收方收到发送序号小于自己接收序号的I格式报文时,意味着报文在经过网络传输时存在重传。当接收方收到正确的I格式报文时,向发送方发送S格式报文进行确认。如果发送方的I格式报文长时间没有在对方的接收序号中得到确认,则意味着发生了报文丢失或网络中断。

提高电气监控系统实时性的优化方法

提高电气监控系统实时性的方法有多种,总体可分为升级电气监控系统硬件和优化软件算法两方面。本文采用软件上对网络通信协议进行优化的方法,实现电气监控系统实时性能的提升。

(一)IEC60870-5-103协议的实时性优化

国际标准的103协议电气接口有2种,一种为光纤接口,另一种是EIARS485接口。光纤传输具有抗干扰能力强,传输速度快等优点。当继电保护装置与监控系统在同一个变电站内或距离较近时,光纤接口与EIARS485接口的传输速度差别可忽略不计。采用光纤接口和EIARS485接口在通信链路拓扑上是相同的,因此光纤接口与EIARS485接口的分析方法是一致的。下面重点对EIARS485接口进行分析。EIARS485接口是一种三线制半双工接口,在一个时间点只能进行信号的接收或者发送,即信号收发不能同时进行。在工程上常采用图4的通信拓扑结构。EIARS485总线上并联的3个继电保护装置轮流获得通信权,向通信前置机发送数据。继电保护装置的数据能否尽快地传送给通信前置机,取决于获得通信权的时间间隔。基于这样的机制,就会出现如果一个继电保护装置传输多个信号时,将会占据比较长的传输时间。特别是当发生大面积电气故障时,继电保护装置可能会产生较多的变位信号。如果按一个继电保护装置上传5个遥信信号计算,传输这5个变位遥信信号要通过至少20帧报文才能完成。为保证继电保护装置的信号能实时传输给通信前置机,在考虑EIARS485接口连接继电保护装置的数量时,就需要计算极端情况下,在EIARS485接口中继电保护装置信号传输的最大延时。计算EIARS485数据的传输延时,本文参考国标GB/T18657.2-2002中的非平衡传输过程进行计算。

(二)IEC60870-5-104协议的实时性优化

104协议是基于以太网传输的,以太网RJ45接口是一种平衡传输的全双工接口。影响104协议实时性的主要有2个因素:一是以太网的传输性能。这是由网络拓扑结构和以太网带宽决定的。二是104协议报文的信号携带效率。下面主要通过对第二个因素优化来提高104协议的实时性。104协议通过I格式帧进行数据传输。104协议中规定一个ASDU在不超过249个字节时,既可以传输一个信号(如开关变位信号),也可以传输一组信号(包含多个遥信信号)。在现有的监控系统104协议使用中,一个I个格式帧通常只传输一个变位遥信信号。如果能够做到在一个I个格式帧内尽可能传输多个数据,无疑提高了信号的传输效率。本文认为可以采用一个I个格式帧包含5~10个遥信变位信号。这样传输虽然增加了I个格式帧的长度(增加了15~50个字节),但对于100M以太网的传输性能来说,增加15~50个字节的影响可以忽略不计。采用这种方法传输后,原先传输500个遥信变位信号需要1000帧报文(一个遥信变位包括一帧遥信变位报文和一帧SOE报文),现在只需要500帧报文,传输延时可节约接近1半。

提高电气监控系统可靠性的优化方法

电气监控系统可靠性主要依靠通信前置机、数据服务器、远动机等设备的冗余配置和通信网络的冗余配置实现。在现有的使用过程中,硬件虽然冗余配置,但冗余设备之间的相互无扰无缝切换却是一直存在的问题。本文通过优化网络通信协议应用,使通信前置机冗余切换和通信网络冗余切换的可靠性得到提高,从而提升电气监控系统的可靠性。

(一)IEC60870-5-103协议双机热备接口切换

103协议在采用EIARS485接口时,一个EIARS485接口只能有1台主机,即2台通信前置机不能通过同一个EIARS485接口向1台继电保护装置发送报文。为提高103协议传输的可靠性,本文认为可将2台通信前置机的所有EIARS485接口并接运行。1台通信前置机处于工作状态(向继电保护装置发送和接收报文),另1台通信前置机处于热备状态(通过该EIARS485接口,只接收工作状态通信前置机与继电保护装置的通信报文)。当热备状态通信前置机检测到工作状态前置机的任何一个EIARS485接口通信中断(该EIARS485接口没有通信报文)时,热备状态前置机接过该EIARS485接口的主机地位,通过该EIARS485接口向继电保护装置发送和接收报文。此时,工作状态通信前置机则放弃该EIARS485接口的主机地位,从而实现IEC60870-5-103协议双机热备接口切换。

(二)IEC60870-5-104协议双以太网(双通道)并行数据传输

现有的监控系统大多都采用通信前置机、数据服务器、远动机和以太网的冗余配置。冗余配置大大提高了信号传输的可靠性。但目前常用的双机双网切换机制都为“硬切换”,即正常情况下冗余的两台通信前置机中只有其中一台使用冗余通信网络中的一条与远动机或服务器进行通信。当正常运行的前置机发生故障或者正常运行的通信网络中断时,通信切换到冗余的另一台通信前置机或另一条通信网络。但是使用这种机制最大的缺点是:通信前置机的切换和通信网络的切换是通过通信前置机内部软件进行判断实现的,切换过程通信是中断的,无法做到无扰连续切换。2008年,IECSC65WG15了IEC62439高可用性自动化网络协议,其中IEC62439-3规定的并行冗余协议(PRP),提出了将设备连接在具有相同特性并列运行的2个LAN网络结构上,在设备上实现冗余网络通信的数据处理。

IEC60870-5-104协议没有规定如何使用冗余通信网络进行数据传输。如果采用并行冗余协议(PRP),需要在各设备内部增加链路冗余体(LRE)进行冗余网络通信的数据处理。但传统变电站现有的监控系统设备并不具有这样的功能结构。如果采用并行冗余协议(PRP),无疑需要重新设计现有的监控系统设备。本文根据并行冗余协议(PRP)的通信原理和104协议的通信机制,在不改动现有设备的基础上,对现有的104协议的通信方式进行修改,从而实现104协议在冗余网络上的并行数据传输。

下面以通信前置机与远动机通信为例,介绍104协议并行数据传输方法(如图5)。在通信前置机和远动机的104协议程序中定义冗余传输的以太网口A和以太网口B。在以太网口A与以太网口B冗余并列通信时,双方链路初始化结束后,总召换和对时报文均由远动机通过以太网口A启动,通信前置机通过这2个以太网口,以相同的报文(包括相同的发送序号和数据内容)向远动机发送报文。远动机则同时从本机冗余传输的以太网口A和以太网口B读取报文,判断2个以太网口收到报文的发送序号,舍弃发送序号较小的报文。如果其中一条以太网链路发生翻动(因路由器或交换机的原因导致通信链路短时中断)时,通信前置机与远动机对这条以太网链路重新进行通信链路初始化(如图6)。初始化结束后,通信前置机并不将该条链路报文的发送序号置0,而是使用与另一正常链路相同的报文(包括发送序号和数据内容)继续发送,从而保证在冗余的通信网路上进行数据的同步传输。

结论

电气监控系统是实现电气设备远程监视和集中控制的综合自动化平台。提高电气监控系统的实时性和可靠性是目前研究电气监控系统的难点和热点。本文从网络通信协议的角度出发,通过对电气监控系统常用通信协议原理的分析,提出了IEC60870-5-103、IEC60870-5-104通信协议的优化使用方法。实践证明,采用该方法在不增加现场电气设备和电气监控系统硬件的条件下,通过修改电气监控系统软件算法,实现了电气监控系统性能的大幅提升,保证了电气监控系统的实时性和可靠性。

文件传输协议范文 篇3

黄河、黄河,这是长江,请开炮收到,正在汇报,正在汇报,完毕。

当时觉得他们说话特别嗦,重复呼叫名号、自报家门、重复对方要求,重复自己的话,最后还加个完毕,看着都着急。

很不幸,在网络世界,电脑和电脑之间的通讯,比这个“嗦”有过之而无不及。

这个所谓的“嗦”,是因为战场通讯和网络通讯有很多相似的地方:环境恶劣、距离遥远、干扰众多而又要内容不失真,所以通讯双方,都要反复验证信息传送的正确性。这一套通话的模式,在网络世界里称为协议,而上面那种通话模式―互相喊话、确认身份、确认发送的信息、确认发送结束,可以比拟为网络中最常用的TCP协议(见图1)。

小提示:

TCP协议是TCP/IP协议的一部分,而TCP/IP协议是互联网的基础。通俗地理解,TCP是“说话”的方式、IP协议用来“呼叫”通话的电脑。

QQ传输文件比MSN快?原因一

QQ、MSN在传文件时,将文件的数据分成很多小数据包,每个包里面再添加上这些嗦的“话”,以保证能可靠地接收,毫无疑问“一分钟也传不了几句话”。

后来,QQ改革了,换了一种通话协议―UDP协议,这个协议如同发电报,将数据一股脑地发给对方,对方只简单地回复“收到”即可。至于全不全、对不对就不管了。这个协议效率很高,传送文件的速度当然就快了(见图2)。

小提示:

UDP协议虽然可靠性差、错误率高,但在网络视频应用中效果良好,视频聊天软件均采用此协议。另外,QQ也采取了一些措施来克服它的缺点,如让文件断点续传(MSN无断点续传功能)。

原因二,选择最近的路线

网络还有一个复杂的情况:两台互传文件的电脑可能远隔“千山万水”,要通过许多服务器、路由器、网关和电缆中转,才有可能达到目的地。UDP协议为了加快连接速度,会选择尽量短的路线(称为UDP直连模式)。而MSN使用的TCP协议,却先将数据包发送到MSN服务器,服务器再转送到目的地(称为TCP中转模式),数据正确性虽有保证,但绕了路,也会受到服务器拥堵的影响。

原因三,礼让与加塞

TCP协议是一个“和谐”的协议,当它发觉网络堵塞,会自动减慢数据包发送,让互联网保持通畅。而UDP协议是一个“霸道”的协议,它想尽一切办法将数据传送出去,而不管是否加重网络拥堵。

用什么传输比较稳定

通过上面的分析,稳定传输文件非MSN莫属么?其实MSN虽使用TCP协议,但中转太多,服务器又在国外,掉线率不比QQ少,因此从连接的稳定性而言,QQ和MSN差不多,但MSN传输的文件,错误率会小一些。

小提示:

文件传输完成后,赶快测试传输的文件是否有错误。另外,传输不畅,可以使用新浪UC、网易泡泡(见图3)、百度Hi等类似工具。

传大文件用什么

这次推荐QQ么?传大文件,QQ容易掉线、大小受限制(2GB)、数据错误率较高,这次推荐一款称为Lava-Lava的软件(/)。该软件文件传输性能和QQ差不多,但它提供的离线传输功能,速度很快,常可以达到你的网络的最大上传、下载速度,稳定性高,离线传输的文件大小不受限制(QQ限制1GB)。有人还通过注册2个Lava-Lava号来当网络硬盘使用呢。

小提示:

离线传输就是先将文件传送到服务器,然后接收方再从服务器下载。Lava-Lava的离线传输操作非常方便,在聊天窗口,选择“文件传输通过离线服务器转发文件”即可(见图4),或直接拖动文件到未上线好友的聊天窗口中。

文件传输协议范文 篇4

关键词:网络文件;传输机制;TCP;UDP

中图分类号:F49

文献标识码:A

文章编号:16723198(2013)01017001

0引言

网络信息技术的发展给我们的工作与生活带来了极大的便利,推动了信息在用户之间的快速流通。伴随着我们当前网络信息技术在日常生活中的普及,我们所需要的许多文件都是通过网络进行传输的。本文就对网络文件的传输机制问题进行了分析与讨论。

1TCP与UDP协议相关理论概述

1.1TCP相关理论概述

TCP是TCP/IP体系中面向连接的运输层协议,它提供全双工的和可靠交付的服务。所谓“面向连接”的含义就是在正式通信前必须要与对方建立起连接,否则通信就会无法进行。这种连接是实时的,只有双方都在时才能通信。

1.2UDP相关理论概述

UDP是面向非连接的用户数据包协议。“面向非连接”的含义是指在正式通信前不必与对方先建立连接,不管对方状态如何直接发送数据。UDP协议适用于可靠性要求不高的应用环境,或者根本不需要建立可开连接的情况。所以说,UDP协议能够快速的发送数据,降低系统连接时的消耗。

表面上看起来,UDP好像比TCP的速度更快,因为相比较UDP协议而言,TCP协议更加复杂一些,但是实际上并不完全是这样,特别是针对那些具有较强可靠性的应用,它们所需要的就是网络文件传输的稳定性与可靠性。在这种情况下,我们往往就会选择TCP协议。

2网络文件传输机制中的多线程技术应用

2.1多线程技术的定义

所谓多线程技术指的就是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,各个线程之间彼此互相独立。它和进程一样拥有独立的执行控制,由操作系统负责调度,二者的区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

2.2文件传输中多线程技术的引入

为了能够让文件在网络传输过程中能够更快速,我们有必要应用多线程技术。使用多线程传输文件时,发送端和接收端在读写文件时必须把文件共享属性设置为Cfile::shareDentNone。这是因为在发送端会有多个线程同时只读一个文件。

3影响网络文件传输速度的因素分析

要想实现网络文件传输的最优状态,就应当充分掌握影响网络文件传输速度的各项因素。笔者通过分析现有理论以及自身的亲身实践,认为能够给网络文件传输速度带来较大影响的因素主要有以下两个方面:

3.1单词读取文件的大小

网络发送端每一次所读取的文件所包含的字节数以及网络接收端每一次写入文件所包含的字节数都会对网络文件的传输速度产生极大的影响。基于硬盘的读写性质,我们在进行读盘以及写盘的时候最好读入或者写入N个字节的数据(N为扇区的大小)。通过这种操作方式,能够加速文件被读入缓冲区以及写入磁盘的速度。

3.2套接字的个数

网络文件在传输过程中,通常状况下都是一个线程单独获取一个套接字。在这种模式下,套接字的数量也就等于传输线程的数量。这样就会产生这样一个问题:套接字的个数越多是不是就意味着网络文件的传输速度就会随着而增长呢?实践证明,而这并不是成比例增长的。比如,当我们在开展“一个线程单独获取一个套接字”的编程过程中,当套接字的个数(同线程的个数相等)到达一定规模时,如果再使套接字的数量持续上升,那么所表现出来的对于传输速度的提升就会越来越弱。在套接字的数量达到临界值以后,甚至还会降低传输速度。

通过上述分析可以看到,通过综合分析系统性能以及传输性能,假如选择“一个线程单独获取一个套接字”的模式进行编程,那么套接字数量的选择应当同处理器的能力相适应,不能设置的太高。

4结束语

通过上述几个部分的分析与论述,我们可以看到,将TCP应用于网络文件的传输具有更强的稳定性以及可靠性。在应用TCP开展网络文件传输过程中,为了更高效的促进网络文件的传输,还需要将多线程技术引入进来。本文在分析过程中涉及到了网络文件传输过程中的一些影响因素,希望能够对我国当前网络文件传输机制的不断完善提供一点可借鉴之处。

参考文献

[1]王国忱,娄丽娜。TCP服务器端程序的一种实现[J].内蒙古民族大学学报(自然科学版),2009,(06).

文件传输协议范文 篇5

关键词:TCP协议;Winsock控件;网络编程;

文件传输

一、Winsock控件基础

Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。所谓Socket,通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。Winsock控件可以与远程计算机建立连接,并通过用户数据报协议UDP或者传输控制协议TCP进行数据交换,这两种协议都可以用来创建客户与服务器应用程序。与Timer控件和CommandDialog控件类似,Winsock控件在运行时是不可见的。在使用Winsock控件时,首先需要考虑使用什么协议。可以使用的协议包括UDP和TCP。两种协议之间的重要区别在于它们的连接状态:TCP协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。到底选择哪一种协议通常是由需要创建的应用程序决定的。本文以TCP为例介绍文件传输。

TCP协议的全名为“传输控制协议(transfer control protocol)”,这是一种在Internet上使用的 主要协议。因此,当您使用TCP协议连接两个网络上的设备时,将可以在它们之间交换希望交换的数据。

同时,如果您开发的应用程序属于主从式应用架构应用系统时,将必须要知道应用系统主机的ip地址(利用RemoteHost属于取得)以及连接端口号(利用remoteport属于取得)。在这些数据完全备齐之后,您才可以进行进一步的调用、连接。

因此,如果正在建立主机端应用程序时,必须指定本机,必须指定本机(执行应用程序所在的计算机)所用的连接端口号(localport属于),接着将Winsock控件设置为“监听(listen)”,即可等候远程客户端进行调用与连接。因此,当主机端接收到客户端调用并且要求连接的信息时,将会触发“要求连接()”的事件,接着进行标准“允许”或是“拒绝”的程序。

一旦主机端与客户端连接完成之后,您将可以开始使用“传送数据(senddata)”方法,将数据传送给对方,并且利用“传送完成(sendcomplete)”事件,来检测数据是否传送完毕。同时,在数据传达对方的计算机时,将会触发对方计算的“接收数据(dataarrival)”事件。此时,您可以使用“取得数据(getdata)”方法,来去出这些接收到的数据。

二、Winsock控件工作原理

Winsock控件是基于Socket规范创建的,所以其通信的实质是对Socket接口进行数据的读写操作。如果两个应用程序需要通信,它们可以通过使用Socket类来建立套接字连接,可以将这个过程想象为一次电话呼叫过程:呼叫者通过拨号与被呼叫者连接,当电话接通时,双方都可以自由通话了,只不过这里的呼叫者被称为“客户”,被呼叫者则称为“服务器”,而号码则为“IP地址+端口”,但在建立连接之前,必须由“客户”发出呼叫,且此时的“服务器”正在监听。因此,基于TCP/IP协议的通信,需要分别建立客户端应用程序和服务器端应用程序。

三、基本实现方法

客户端要与服务器端进行通信,首先,必须知道服务器端的域名或IP地址(RemoteHost属性),就像要和某人打电话前,必须知道对方的电话号码;其次,还必须和服务器端约定相同的端口(RemotePort属性),用于数据的输入和输出;最后,调用Connect方法与服务器端建立连接。

四、实例实现

(一)实现原理

本文将实现的文件传输只有一个发送方和一个接收方,这是最基本的文件传输方式,运用的原理也比较简单:发送方先获取待传输文件的基本信息,主要是文件名及文件长度;然后,将其发送给接收方;接着,建立和文件一样大小的数据缓冲区,并将文件读入;最后,将数据缓冲区中的数据发送给接收方。与此同时,当接收方接收到文件名和文件长度之后,就为其创建新的文件和数据缓冲区;然后,接收传输的文件数据,并将其放在数据缓冲区中;最后,依次将数据缓冲区的数据写入新创建的文件中。这样便完成了不同计算机之间的文件传输。

(二)服务器端主程序主要代码

'发送文件名和文件长度代码:

Winsock1.SendData filename

Winsock1.SendData filelength

'发送文件的内容

Open filepath For Binary As #1'设置数据缓冲区

ReDim data(filelength)

For j = 1 To filelength

Get1,j, data(j)

Next

send = filelength

Winsock1.SendData data

Close #1

End Sub

"客户端请求连接"事件代码:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

If Winsock1.State 0 Then

Winsock1.Close

End If

Winsock1.Accept requestID '接受客户请求

End Sub

(三)客户端主程序主要代码代码

"连接"按钮事件的代码:

Private Sub connect_Click()

Winsock1.Protocol = sckTCPProtocol'以TCP方式进行通信

'设置远程服务器IP地址,为方便调试笔者使用的是自身的IP地址

=

'设置远程服务器通信程序端口号,与服务器端相同

= Val

'与服务器端建立连接

End Sub

"数据到达"事件的代码:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'状态栏显示提示文字

StatusBar1.SimpleText = "正在接收服务器发送的数据。"

'先接收文件名和文件的长度

If flag = True Then

filename, vbString, bytesTotal - 4

filelength, vbLong

'建立文件

Open filename For Binary As #1

flag = False

Else

'设置缓冲区

ReDim data(bytesTotal)

'接收数据并写入文件

data, vbArray + vbByte

For j = received + 1 To received + bytesTotal

Put1,j, data(j - received - 1)

Next

'更新接收到的数据

received = received + bytesTotal

ProgressBar1.Value = Int((received / filelength) * 100)

If ProgressBar1.Value>= 100 Then Close #1

End If

End Sub

从以上的实例中,基本了解了有关Winsock控件的使用方法和文件传输的过程。然而,当需要传送的数据比较大时,就不能像以上介绍的那样,直接将整个文件放入数据缓冲区中了,我们的内存是无法忍受用一个几百MB甚至上GB的空间去存储那些临时数据的。显然,这种做法已远不能满足我们的需求,这时可以将文件按照一定的大小,分成若干个数据包。首先,设置数据包的大小,根据文件的基本信息,计算出总共需要的数据包数;然后,依次读取同数据包一样大小的数据到数据缓冲区中;接着,将数据缓冲区中的数据,发送到指定的计算机上;同时在另一端,建立一个数据缓冲区,缓冲区的大小要根据接收到的数据来确定,依次接收客户端传输过来的数据包,并将数据缓冲区的数据写入相应的文件中,这样就很容易实现大文件的传输了。

五、小结

本文通过在VB中使用Winsock控件,实现网络之间的文件传输,更进一步理解了其工作原理。虽然本文重点介绍的是TCP协议的文件传输,但是UDP协议的文件传输实现与TCP是相似的。本文介绍的Winsock工作原理、实现方法、实例的展现还是有普遍的适用性的,能在一定的程度上有助于解决普遍的问题。

参考文献:

[1]黄玲玲,杨剀,王颖。在VB中使用Winsock控件实现局域网通信[J].信息技术,2005,6

[2]王晓平,钟军。VisualBasie网络通信协议分析与应用实现。2003