基于UDP 协议的Socket网络编程

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wgm740821
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:套接字是一种网络编程接口,应用程序通过这种接口可以和不同网络中的应用程序进行通信,而不必担心网络协议不同所引发的问题。文章介绍了基于UDP协议的Socket网络编程机制和原理,提出了以Java Socket来实现网络通信的步骤和方法。
  关键词:UDP协议;Socket;网络通信
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)34-1867-02
  Socket Network Programs Based on UDP Protocol
  ZHOU Li-juan
  (College of Science, Hunan University of Technology, Zhuzhou 412008, China)
  Abstract: Windows Socket is a network programming interface,and applications can correspond to eachother in different domains without worrying about the different protocols by using it.This paper introduces the mechanism and principle of Socket network programs based on UDP protocol,and proposes a method of network with Java socket.
  key words: UDP protocol;socket; network communication
  
  Socket适用于网络环境中的进程间通信,它已成为当前许多操作系统的网络API,也是网络操作系统中必不可少的基础功能。随着Linux操作系统和Internet的不断发展,Linux网络环境下尤其是基于UDP的socket通信技术仍广为注目。文章介绍了socket的编程原理,并通过一个Java编写的客户/服务器程序,描述了网络中基于UDP的不同主机上的两个进程之间的socket通信机制。
  1 Socket通信机制
  Socket(套接字)机制是一种API,是网络应用程序的编程接口。Socket是通过标准文件描述符和其它程序通讯的一个方法。每一个套接字都用一个半相关描述:{协议,本地地址、本地端口}来表示;一个完整的套接字则用一个相关描述:{协议,本地地址、本地端口、远程地址、远程端口},每一个套接字都有一个本地的由操作系统分配的唯一的套接字号。
  根据传输数据类型的不同,Socket主要分为三类:1) 流式Socket(SOCK_STREAM),在这种方式下,两个通讯的应用程序之间要先建立一种虚拟的连接,提供可靠的、面向连接的通信流,它使用TCP协议,从而保证了数据传输的正确性和顺序的。2) 数据报Socket(SOCK_DGRAM),它使用数据报协议UDP,定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。3) 原始Socket,原始套接字允许对底层协议如IP或ICMP直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。
  2 UDP协议的工作原理
  UDP协议是一个面向无连接的协议,其连接的建立不必像TCP那样需要服务器端侦听,也不需要有客户机请求连接,属于一种“强制”性的网络连接。UDP提供一对一或一对多的、无连接的数据报服务。该服务对消息中传输的数据提供不可靠的、最大努力的传送,这意味着它不保证数据的到达,也不保证所传送的数据报的顺序是否正确,UDP不重新传输丢失的数据。其主要工作是:将应用程序传输过来的数据分块交给网络层,确认接受到分组信息。
  尽管UDP无法像TCP一样提供可靠的数据传输,但UDP并不比TCP缺乏优越性。UDP在传输效率方面比TCP要高一些,而且许多应用程序并不需要保证严格的传输可靠性,比如视频会议系统等,需要实时的交互,但并不要求音频视频的绝对正确。
  使用UDP协议传输数据时,首先设置客户计算机的Local Port(本地端口)属性,而作为服务器的计算机只需要设置Remoter Host(远程主机)属性为客户计算机的IP地址或域名即可,并将其Remote Port属性设置为客户计算机上的Local Port属性。使用UDP端口号时,端口提供了用于发送消息的位置,每个端口由一个唯一的编号来标识。当应用程序向另一台计算机发送数据时,UDP生成一个数据头,包括源端口,这些端口提供送达信息所需要的地址。UDP协议还为数据和数据头计算出求和检验的值,在目标计算机中,数据包被传递至UDP协议程序并送到目的地端口。
  3 UDP套接字的通信过程
  Java.net中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信。DatagramSoc ket用来在程序之间建立传送数据报的通信连接,是数据报通信中的Socket。在数据报实现C/S通信程序时,无论在客户端还是服务器端,都要首先建立一个DatagramSocket对象,用来表示数据报通信的端点,应用程序通过Socket接收或发送数据报。
  DatagramPacket则用来表示一个数据报,它是传输数据的载体,封装了数据、数据长度、数据报地址等信息。
  采用UDP套接字方式实现C/S的通信程序由客户端和服务器端两部分组成。服务器进程依次按以下步骤进行:1) 调用Socket()创建一个数据报套接字;2) 调用bind()把服务器地址绑定在该套接字上;3) 调用recvform()等待客户进程发来的请求,服务器此时处于无限循环状态;4) 服务进程接收到客户进程所发来的数据报后,进行处理,调用sendto()将处理结果返回给客户进程,返回状态3),继续监听;5)服务进程调用close()撤消套接字,终止服务。
  客户进程则按以下步骤进行:1) 调用Socket()创建一个数据流套接字;2) 调用sendto()向服务器进程发送数据报;3) 调用recvfrom()等待服务器进程返回该处理结果;4) 客户进程调用close()撤消套接字。
  4 数据报通信实例
  程序由服务器端和客户端两部分组成,服务器端主机中有一个名为“udp_socket.txt”文件,文件中保存了一段英文。服务器端接收一个客户端的请求,就从文件中读取若干个英文字符发送给客户端。当文件中所有内容发送给完毕,服务器端程序将退出。客户端首先构造一个数据报发送给服务器端,然后等待接受服务器端响应,当接收到服务器端的数据报后,显示数据并结束通信。
  1) 服务器端程序
  public class Server_Th
  { boolean m_q=true;
   public void serverWork() throea IOException
   {DatagramSocket ds=new DatagramSocket(2000)
   //创建端口号为2000的数据报套接字
   BufferedReader in=new BufferedReader(new FileReader (“udp_socket.txt”));
  while(m_q)
  { byte buf[ ]=new byte[256];//创建缓冲区
  DatagramPacket packet=new DatagramPacket (buf, buflength); //创建接收数据报对象
  ds.receive(packet);//接收数据报
  String dString=null;
  if((dString=in.reaLine())==null)
  {in.close();
  m_q=false;
  dString=”Good Morning!”;}
  buf=dString.getBytes();//将数据存储到buf中
  inetAddress address=packet.getAddress();
  //得到客户端IP地址
  int prot=packet.getPort();//得到客户端的端口
  packet=new DatagramPacket (buf,buf.length, address. port );
  //构造要发送数据报
  ds.send(packet);//发送数据报
  }
  ds.close();//关闭
  }
  public void main(String args[])
  { Server_Th server=new Server_Th();
  try
   {server.serverWork();}
   Catch(IOException e){}
  }}
  2) 客户端程序
  public class Client_Th
  {public void main(String args[ ]) throws IOException
  { DatagramSocket socket=new DatagramSocket( );
  //创建套接字对象
   byte buf[ ]=new byte[256];
   InetAdress address=InetAddress.getByName(“20.14.30.9”);
  //服务器IP地址
  DatagramPacket packet=new DatagramPacket(buf,buf. Length,address,2000);//创建要发送的数据报对象
  socket.send(packet);//接收数据报
  packet=new DatagramPacket(buf,buf.length);
  //创建要接收的数据报对象
  socket.receive(packet);//接收数据报
  String received=new String(packet.getData());
  System.out.println(“The string form the server: ” recerived);
  //取得数据报中的数据并显示
  Socket.close();//关闭socket
  }}
  编写程序时客户端和服务器端的DatagramSocket必须用一个端口,因为客户端向服务器端请求时,服务器需要知道从哪个端口监听请求。当数据进行传输时,服务器从接收到的数据报中得到客户端的接收数据的端口,然后将数据报发送到这个端口,客户端则监听这个端口而得到服务器端发送过来的数据报并显示其内容。运行时要先运行服务器端程序,再运行客户端程序。
  5 小结
  Socket在网络编程方面发挥着很大的作用。UDP是可靠性无法得到保障的协议,但对于质量要求不是很高的网络应用程序,UDP是一个很好的选择。
  参考文献:
  [1] 张桂珠.Java面向对象程序设计[M].北京:邮电出版社,2006.
  [2] 周坤,傅德胜.基于Windows Socket的网络数据传输及其安全[J].计算机工程与设计,2007,28(22):5381-5386.
  [3] 赵文清.浅析用Socket的Java语言网络通讯机制和程序设计[J].信息技术,2002(7):66-67.
  [4] 夏靖波.Windows网络程序设计[M].西安:电子科技大学出版,2006.
其他文献
摘要:伴随着国内运营商的重组,CDMA技术重新受到国内的关注,目前,总的来说CDMA技术的演进主要包括一下三个方向。1) 考虑到cdma2000 1x网络自身演进的要求,制定了cdma2000 1x后续标准。2) 为了满足系统在现有频段上扩展无线宽带数据能力以及在无线数据系统上承载各类应用服务的需要,制定了cdma 2000 1x EV-DO REV,O/A/B标准。3) 为了进一步满足在不同频段
“整本书阅读”的概念最早由叶圣陶先生在《论中学国文课程标准的修订》中提出。近年来,阅读引起全社会的广泛关注,人们逐渐意识到阅读能力和中小学生语文素养养成的关系。从长远来看,阅读能力是培养人的素养的基础。研究整本书阅读教学的策略,有效指导学生阅读,做学生阅读的引路人,是每一位语文老师义不容辞的责任。笔者结合教学实践,谈一谈对小学低年级整本书阅读教学策略的认识。  一、确定书目,明确选书缘由  整本书
摘要:随着数据库技术的广泛应用以及多媒体技术的发展,对图像等多媒体数据的存取已成为操作数据库系统的常见问题。结合某针织企业管理信息系统开发的实践,利用流技术、图像转换及图像显示技术等对该问题进行了研究并给出一种设计方案,以SQL Server 2005为后台数据库,以Delphi 7为前台开发工具,实现了图像安全可靠的数据库管理,效果良好。  关键词:图像数据;流;图像转换;图像显示;Delphi
摘要:中国电力通信网是国家专用通信网之一,是电力系统不可缺少的重要组成部分,是电网调度自动化、网络运营市场化和管理现代化的基础,确保了电网安全、稳定、经济可靠地运行。通过对SDH的技术特点等方面的分析来阐述SDH在电力通信网的发展潜力。  关键词:同步数字体系;电力;通信  中图分类号:TM734文献标识码:A文章编号:1009-3044(2008)35-2333-02  SDH in the E
观察是学生获取信息、形成体验的重要方法,更是增强习作表达能力的基础。统编教材四年级上册第三单元以“观察”为训练核心,设置的语文要素是“体会文章准确生动的表达,感受作者连续细致的观察”。如何将语文要素“体会文章准确生动的表达”与“感受作者连续细致的观察”整合起来,在彼此融通中实现单元教学的目标呢?笔者现以这个单元中的《爬山虎的脚》为例,谈谈自己的实践与思考。  一、尊重阅读体验,依托联系还原观察  
摘要:名著传承国学文化,阅读点亮智慧人生。但,高职学生普遍对经典文学缺乏阅读兴趣,习惯被动学习,热衷信息技术。根据学生特点,制定如下教学策略:一、全程依托世界大学城,该平台在我校已经推行四年,目前全校师生人人有空间,个个用空间。二、创新教学内容,从职场角度解读晴雯等人物形象,分析她们在“职场”的成败得失,引发学生对经典名著的兴趣和对职业态度的思考。三、采用翻转课堂教学方式,课前传承知识、课中内化知
摘要:《呼啸山庄》通过凯瑟琳·恩萧和希思克利夫之间狂暴恣肆的爱情描写,展示了畸形社会中人性的变异。可以说是一部以复仇为主题的爱情传奇。整部小说充满了宿命色彩与神秘主义意味。本文尝试分析《呼啸山庄》中的爱情与复仇。  关键词:《呼啸山庄》爱情 复仇  引言  作为英国文学史上最富激情、最为动人的小说之一,《呼啸山庄》中主角凯瑟琳·恩萧和希思克利夫之间生死相依的爱情让无数读者为之动容。凯瑟琳和希思克利
王超和虞佳作为目前四川省唯一一对梅花奖夫妻,他们有许多的共同经历:老家毗邻盐亭和射洪,共同的乡音乡情乡俗,不折不扣的校友,因为参加同一个比赛关注到了对方,他阳光、有责任和担当,她青春活力、上进心强……他们因共同语言走到了一起,这大概就是理想中遇到爱情的模样——觅得知音,白首不离。  M=《现代艺术》 W=王超 Y=虞佳  M:在相伴相守的这些时光里,能给我们分享一下对方做过最让您感动的事情是什么吗
书名:传统文化进校园的实践与反思  作者:康震  出版社:中国社会科学出版社  出版时间:2019年  ISBN:9787520344586  价格:89元  我国是一个拥有几千年历史的国家,拥有着深厚的历史文化和底蕴。2014年,教育部发布了《完善中华优秀传统文化教育指导纲要》,要求各级教育机构将传统文化融入学生的课程体系中,推进中华民族优秀文化的传承。然而,目前很多学校还是没有意识到传统文化进
摘要:为解决计算机机房管理中的困难,提出利用Ghost进行基于PXE远程启动的多播克隆,使计算机机房的管理更加方便、快捷和简单。  关键词:远程启动;PXE;多播克隆;TFTP  中图分类号:TP308文献标识码:A文章编号:1009-3044(2008)36-2772-02  The Multicast Clone Based on PXE  WANG Peng-chong, FANG Da-l