第27卷哈尔滨师范大学自然科学学报Vol.27,No.62011第6期NATURALSCIENCESJOURNALOFHARBINNORMALUNIVERSITYTCP/UDP下一种网络透明传输服务编程接口实现方法*何波玲,隋菱歌(长春金融高等专科学校)【摘要】使用在TCP/UDP协议进行网络通信,会涉及IP地址、端口号、套接字、TCP/UDP协议等网络通信概念,而且TCP传输和UDP传输的编程模式是不同的,对网络通信概念进行了封装,实现了一个网络通信透明传输服务系统,且TCP传输和UDP传输具有相同的编程模式.使用表明,用户无需了解网络通信概念,即可使用该系统进行通信编程,使用极为方便,实现网络通信的实时传输、可靠传输和同一主机的多网卡支持.关键词:TCP/UDP协议;封装;透明网络通信收稿日期:2011-08-22*吉林省教育厅“十一五”科学技术重点研究项目(吉教科合字[2010]第259号);吉林省教育厅“十二五”科学技术研究项目(吉教科合字[2012]第387号)0引言在分布式仿真领域,必须解决多机通信问题.通常使用套接字(Socket)[1]编程,或Windows下的MFC相关类库[2].但是,利用Socket和MFC类库等进行网络编程,仍然要求了解一些基本的网络编程概念,如IP地址、端口号、套接字等.大型的仿真系统都是由多人合作开发完成,为实现网络通信而要求所有相关人员都具备对网络编程概念的了解是不经济的,不仅加重了他们的开发负担,更不利于项目分工协作.因此,如果能开发一种网络通信服务API(ApplicationProgram-mingInterface),最大限度地屏蔽掉网络概念,则会极大地方便仿真软件人员的使用,而且有利于开发出优化的网络通信系统.为实现这一目标,该文对TCPUDPP协议进行了封装,以DLL库[3]和LIB库[3]两种方式提供了一个网络透明编程接口,可实现数据报点-点通信、广播通信及面向连接的可靠通信.1API接口系统的API接口的设计原则是精简,易于使用,接口的个数及接口的调用力求简洁直观.为此,系统API接口如下:(1)Init:进行网络初始化;(2)Send:进行数据报传输或广播传输;(3)Send2:进行面向连接的可靠通信;(4)Recv:进行数据接收.以上接口定义于net.h中,其中Net为封装了TCP、UDP通信服务的类:#defineNet::InitInit#defineNet::Send2Send2#defineNet::RecvRecv#defineNet::SendSend第6期TCP/UDP下一种网络透明传输服务编程接口实现方法2配置文件2.1配置文件每一主机配置一个配置文件,以描述网络配置.配置定义如下:网络配置文件定义→进程定义段[广播分组定义段][子网掩码定义][端口号基值定义]进程定义段→进程定义{进程定义}进程定义→进程标识符=<[IP地址标识符:]IP地址[,TCP]>{<[IP地址标识符:]IP地址[,TCP]>}广播分组定义段→广播分组定义{广播分组定义}广播分组定义→广播分组标识符=<TO:站号标识符串>站号标识符串→站号标识符{,站号标识符}站号标识符→进程标识符[:IP地址标识符]子网掩码定义→SUBNETMASK=<子网掩码>端口号基值定义→PORTBASE=<端口号>其中:用“[”“]”括起来的部分表示可选成分,用“{”“}”括起来的部分表示重复成分,涉及的标识符按C标准定义.“TCP”表示相应的IP地址支持TCP通信,否则只支持UDP通信.2.2站和站号当主机的含多网卡时,在发送数据时,需要指明从哪个网卡发送和接收数据,以进行数据流控制,避免数据丢失和拥塞,这在实时仿真领域极为重要.为表达数据的源和目的,提出“站号”的概念.定义1“进程标识符,IP地址标识符”对、“进程标识符”或“广播分组标识符”称为“站号”.定义2若站号标识的是本地信息传输端点,则称该站号为“本地站号”或“本地站”.定义3若站号标识的是远程信息传输端点,则称该站号为“远程站号”或“远程站”.定义4若站号标识的是多个远程信息传输端点,则称该站号为“广播站号”或“广播站”.每个站用站号标识,站号根据站在配置文件中定义的先后次序从0开始连续编号,用于在Init、Send、Send2、Recv中确定站.3主要数据结构和系统实现图1是系统实现的主要数据结构,以下介绍该数据结构的建立和系统实现.在介绍该...