已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章UDP协议网络编程 2 UDP协议是无连接的协议 它以数据报作为数据传输的载体 数据报是一个在网络上发送的独立信息 它的到达 到达时间以及内容本身等都不能得到保证 数据报的大小是受限制的 每个数据报的大小限定在64KB以内 UDP协议无需在发送方和接收方建立连接 但也可以先建立连接 数据报在网上可以以任何可能的路径传往目的地 在Java中 基于UDP协议实现网络通信的类有三个 用于表达通信数据的数据报类DatagramPacket用于进行端到端通信的类DatagramSocket用于组播通信的类MulticastSocket 3 1数据报通信 3 类DatagramPacket构造方法publicDatagramPacket byte buf intlength publicDatagramPacket byte buf intoffset intlength 这两个方法用于接收数据publicDatagramPacket byte buf intlength InetAddressaddress intport publicDatagramPacket byte buf intoffset intlength InetAddressaddress intport 这两个方法用于发送数据获取数据 获取接收报中的信息publicInetAddressgetAddress publicbyte getData publicintgetLength publicintgetOffset publicintgetPort 设置数据 设置发送报中的信息setAddress InetAddressiaddr setPort intiport setData byte buf setData byte buf intoffset intlength setLength intlength 3 2数据报通信 数据报 4 类DatagramSocket构造方法publicDatagramSocket publicDatagramSocket intport 在指定的端口通信publicDatagramSocket intport InetAddressladdr 在指定的地点运行这三个方法都将抛出例外SocketException 程序中需要捕获处理 最主要的方法 发送与接收数据报publicvoidreceive DatagramPacketp publicvoidsend DatagramPacketp 这两个方法都将抛出例外IOException 程序中需要捕获处理 其他方法publicvoidconnect InetAddressaddress intport 与指定的机器通信publicvoiddisconnect 关闭与指定机器的连接publicvoidclose 关闭Socket 3 3数据报通信 点到点通信 5 6 SingleUDPClient java 看看这个点到点通信程序的运行效果 2 客户端 接收端 SingleUDPServer java 1 服务器端 发送端 7 发送端发出数据报的标准步骤 1 定义数据成员DatagramSocketsocket DatagramPacketpacket InetAddressaddress 用来存放接收方的地址 intport 用来存放接收方的端口号 2 创建数据报Socket对象try socket newDatagramSocket 4445 catch SocketExceptione socket绑定到一个本地的可用端口 等待接收客户的请求 8 3 分配并填写数据缓冲区 一个字节类型的数组 byte buf newbyte 256 存放从客户端接收的请求信息 4 创建一个DatagramPacketpacket newDatagramPacket buf 256 用来从socket接收数据 它只需要两个参数 5 服务器阻塞socket receive packet 在客户的请求数据报到来之前一直等待 9 6 从到来的包中得到地址和端口号InetAddressaddress packet getAddress intport packet getPort 7 将数据送入缓冲区或来自文件 或键盘输入8 建立报文包 用来从socket上发送信息packet newDatagramPacket buf buf length address port 9 发送数据包socket send packet 10 关闭socketsocket close 10 接收端接收数据报的标准步骤 1 定义数据成员intport InetAddressaddress DatagramSocketsocket DatagramPacketpacket byte sendBuf newbyte 256 2 建立socketsocket newDatagramSocket 11 3 向服务器发出请求报文address InetAddress getByName args 0 port parseInt args 1 packet newDatagramPacket sendBuf 256 address port socket send packet 这个数据报本身带有客户端的信息4 客户机等待应答packet newDatagramPacket sendBuf 256 socket receive packet 如果没有到就一直等待 因此实用程序要设置时间限度5 处理接收到的数据Stringreceived newString packet getData System out println received 12 3 4数据报通信 组播通信 DatagramSocket只允许数据报发往一个目的地址 类包中提供了类MulticastSocket 允许将数据报以广播的方式发送到某个端口的所有客户 类MulticastSocket是在客户端使用 监听服务器广播来的数据 而服务器端仍然使用DatagramSocket来发送数据 只是发送的数据报的目的地址有所变化 13 类MulticastSocket 从DatagramSocket继承而来构造方法publicMulticastSocket publicMulticastSocket intport 在指定的端口通信这两个方法都将抛出例外IOException 程序中需要捕获处理 主要方法publicvoidjoinGroup InetAddressmcastaddr 加入一个广播组publicvoidleaveGroup InetAddressmcastaddr 离开一个广播组publicvoidsetTimeToLive intttl 指定数据报离开时间publicvoidsend DatagramPacketp bytettl 在指定的时间内将数据报发送出去这四个方法都将抛出例外IOException 程序中需要捕获处理 继承DatagramSocket的方法publicvoidreceive DatagramPacketp 接收数据publicvoidsend DatagramPacketp 发送数据publicvoidconnect InetAddressaddress intport 与指定的机器通信publicvoiddisconnect 关闭指定的连接publicvoidclose 关闭Socket 14 MulticastSocketsocket newMulticastSocket 4446 InetAddressaddress InetAddress getByName 230 0 0 1 socket joinGroup address receivedatagramsocket leaveGroup address socket close InetAddressgroup InetAddress getByName 230 0 0 1 DatagramPacketpacket newDatagramPacket buf buf length group 4446 socket send packet 客户端 服务器端 15 广播组的IP地址是一类特殊的IP地址 它们没有分配给网上的硬件资源使用 而是专门保留下来作为广播通信使用的 就像127 0 0 1是专门用来描述本机IP一样 这一类地址的范围是从224 0 0 0到239 255 255 255 其中地址224 0 0 0又被保留不能被一般应用程序所使用 当前 广播通信只能在应用程序中使用 不能在Applet中使用 16 许多防火墙和路由器可以配置为不允许UDP数据报进入 因此 如果想在这种环境下提供UDP网络服务 就需要请求系统管理员重新配置防火墙和路由器 以允许UDP数据报进入 17 3 5UDP网络编程案例 1 网络编程UDP协议的 Hello world 程序 18 importjava io publicclassUDPClient publicstaticvoidmain String args throwsSocketException IOException Stringh hello world byte b h getBytes InetAddressiip InetAddress getByName localhost DatagramSocketds newDatagramSocket DatagramPacketdp newDatagramPacket b b length iip 3334 ds send dp 19 2 UDP协议聊天程序 importjava awt importjava awt event importjava io classmyClientextendsFrame DatagramSocketds1 DatagramPacketdp1 null DatagramSocketds2 DatagramPacketdp2 null InetAddressiip byte b Panelp1 p2 Buttonbs TextAreat1 TextFieldt2 t3 Labell1 l2 ttct 20 myClient Stringss throwsSocketException IOException super ss p1 newPanel p2 newPanel t1 newTextArea t2 newTextField 那你就去吧 别让妖精迷住 34 l1 newLabel 昵称 l2 newLabel 消息 t3 newTextField 悟空 bs newButton 发送 bs addActionListener newbss addWindowListener newww setLayout newFlowLayout p1 setLayout newBorderLayout p1 add t1 add p1 p2 setLayout newFlowLayout p2 add l1 p2 add t3 p2 add l2 p2 add t2 p2 add bs add p2 setBounds 100 100 460 260 setVisible true ds1 newDatagramSocket 21 ds2 newDatagramSocket 3335 iip InetAddress getByName localhost t newttc this t start classbssimplementsActionListener publicvoidactionPerformed ActionEvente try dp1 newDatagramPacket t3 getText trim t2 getText trim getBytes t3 getText t2 getText trim getBytes length iip 3334 ds1 send dp1 t1 append t3 getText trim t2 getText n catch IOExceptione1 classwwextendsWindowAdapter publicvoidwindowClosing WindowEventee System exit 0 22 publicstaticvoidmain String args throwsIOException SocketException newmyClient Client classttcextendsThread myClientmc null ttc myClientmc this mc mc publicvoidrun while true try mc b newbyte 1024 mc dp2 newDatagramPacket mc b mc b length mc ds2 receive mc dp2 mc t1 append newString mc b trim n catch IOExceptiongg 23 3 组播地址通信 importjava io importjava util publicclassMultiCast privateMulticastSocketms null privateInetAddressip null privateScannersc null byte b newbyte 4096 privateDatagramPacketind newDatagramPacket b b length privateDatagramPacketoutd null publicvoidinit throwsIOException try ms newMulticastSocket 30000 ip InetAddress getByName 230 0 0 1 ms joinGroup ip ms setLoopbackMode false outd newDatagramPacket newbyte 0 0 ip 30000 newmyThread start sc newScanner System in 24 while sc hasNextLine byte buff sc nextLine getBytes outd setData buff ms send outd finally ms close classmyThreadextendsThread publicvoidrun try while true ms receive ind System out println 消息 newString b 0 b length 25 catch IOExceptionex try if ms null ms leaveGroup ip ms close System exit 1 catch IOExceptionss publicstaticvoidmain String args throwsIOException newMultiCast init 26 4 组播地址聊天程序 importjava awt event importjava awt importjava io publicclassmultiCastextendsFrame Panelp1 p2 Buttonbs TextAreat1 TextFieldt2 t3 Labell1 l2 privateMulticastSocketms null privateInetAddressip null byte b newbyte 1024 privateDatagramPacketind newDatagramPacket b b length privateDatagramPacketoutd null 27 publicmultiCast Stringss throwsIOException super ss p1 newPanel p2 newPanel t1 newTextArea t2 newTextField 大师兄 我去捉妖精吧 34 t3 newTextField 八戒 bs newButton 发送 l1 newLabel 昵称 l2 newLabel 消息 bs addActionListener newbss addWindowListener newww setLayout
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年吉林医药学院附属医院医护人员招聘考试参考题库及答案详解
- 2026年南京市妇幼保健院医护人员招聘考试参考试题及答案详解
- 2026年湖北民族大学附属民大医院医护人员招聘笔试备考题库及答案详解
- 2026年四川大学华西口腔医院医护人员招聘考试参考试题及答案详解
- 2026年玉林市妇幼保健院医护人员招聘笔试参考题库及答案详解
- 2026年中国人民解放军第一五二中心医院医护人员招聘笔试备考试题及答案详解
- 2026年湖南省肿瘤医院医护人员招聘笔试参考题库及答案详解
- 2026年山西中医药大学附属医院医护人员招聘考试参考试题及答案详解
- 2026年解放军北部战区空军医院医护人员招聘笔试备考题库及答案详解
- 2026年内蒙古医科大学附属医院院医护人员招聘笔试备考试题及答案详解
- 福建省厦门市2024-2025学年高一下学期物理期末质量检测试卷(扫描版含答案)
- 电力系统职业道德培训
- 药品印刷包材管理制度
- 人工呼吸操作步骤详解
- 第五章 园林设计方案入门(一)
- 《合同法解析》课件
- 电力储能用飞轮储能系统技术规范
- 【MOOC】空中机器人-浙江大学 中国大学慕课MOOC答案
- 《配电室接地网施工方案》
- JJF 2137-2024表面铂电阻温度计校准规范
- MOOC 中国电影经典影片鉴赏-北京师范大学 中国大学慕课答案
评论
0/150
提交评论