050 网络编程.ppt_第1页
050 网络编程.ppt_第2页
050 网络编程.ppt_第3页
050 网络编程.ppt_第4页
050 网络编程.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

深入Java编程 专业教程 理论讲解部分 Ver3 1 概述 介绍Datagram网络编程给出一个例子简单实现Datagram网络编程 重点 难点 Datagram编程的实现 Datagram编程的实现 第050课网络编程 3Datagram 第050课网络编程 所谓数据报 Datagram 就跟日常生活中的邮件系统一样 是不能保证可靠的寄到的 而面向链接的TCP就好比电话 双方能肯定对方接受到了信息 TCP 可靠 传输大小无限制 但是需要连接建立时间 差错控制开销大 UDP 不可靠 差错控制开销较小 传输大小限制在64K以下 不需要建立连接 TCPUDP的比较 第050课网络编程 包中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信 DatagramSocket用于在程序之间建立传送数据报的通信连接 DatagramPacket则用来表示一个数据报 3Datagram 第050课网络编程 先来看一下DatagramSocket的构造方法 port指明socket所使用的端口号 如果未指明端口号 则把socket连接到本地主机上一个可用的端口 DatagramSocket DatagramSocket intprot DatagramSocket intport InetAddressladdr 上述的两个构造方法都声明抛弃非运行时例外SocketException 程序中必须进行处理 或者捕获 或者声明抛弃 laddr指明一个可用的本地地址 给出端口号时要保证不发生端口冲突 否则会生成SocketException类例外 3Datagram 第050课网络编程 用数据报方式编写client server程序时 无论在客户方还是服务方都遵循 首先都要建立一个DatagramSocket对象 用来接收或发送数据报 然后使用DatagramPacket类对象作为传输数据的载体 3Datagram 第050课网络编程 下面看一下DatagramPacket的构造方法 DatagramPacket bytebuf intlength DatagramPacket bytebuf intlength InetAddressaddr intport DatagramPacket byte buf intoffset intlength DatagramPacket byte buf intoffset intlength InetAddressaddress intport 其中 buf中存放数据报数据 length为数据报中数据的长度 addr和port指明目的地址 offset指明了数据报的位移量 3Datagram 在接收数据前 应该采用上面的一种方法生成一个DatagramPacket对象 给出接收数据的缓冲区及其长度 第050课网络编程 DatagramPacketpacket newDatagramPacket buf 256 Socket receive packet 然后调用DatagramSocket的方法receive 等待数据报的到来 receive 将一直等待 直到收到一个数据报为止 3Datagram 第050课网络编程 发送数据前 也要先生成一个新的DatagramPacket对象 这时要使用上面的第二种构造方法 DatagramPacketpacket newDatagramPacket buf length address port Socket send packet 在给出存放发送数据的缓冲区的同时 还要给出完整的目的地址 包括IP地址和端口号 发送数据是通过DatagramSocket的方法send 实现的 send 根据数据报的目的地址来寻径 以传递数据报 3Datagram 第050课网络编程 在构造数据报时 要给出InetAddress类参数 类InetAddress在包中定义 用来表示一个Internet地址 我们可以通过它提供的类方法getByName 从一个表示主机名的字符串获取该主机的IP地址 然后再获取相应的地址信息 14 3 1基于UDP的简单的Client Server程序设计 有了上面的知识 我们就可以来构件一个基于UDP的C S网络传输模型 客户端 importjava io importjava util 3Datagram 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 publicclassQuoteClient publicstaticvoidmain String args throwsIOException if args length 1 如果启动的时候没有给出Server的名字 那么出错退出System out println Usage javaQuoteClient 打印出错信息return 返回 DatagramSocketsocket newDatagramSocklet 创建数据报套接字Byte buf newbyte 256 创建缓冲区InetAddressaddress InetAddress getByName args 0 3Datagram 第050课网络编程 由命令行给出的第一个参数默认为Server的名字 通过它得到Server的IP信息DatagramPacketpacket newDatagramPacket buf buf length address 4445 创建DatagramPacket对象socket send packet 发送packet newDatagramPacket buf buf length 创建新的DatagramPacket对象 用来接收数据报socket receive packet 接收Stringreceived newString packet getData 根据接收到的字节数组生成相应的字符串System out println QuoteoftheMoment received 打印生成的字符串socket close 关闭套接口 3 1基于UDP的简单的Client Server程序设计 3Datagram 服务器端 QuoteServer javapublicclassQuoteServer publicstaticvoidmain Stringargs throwsjava io IOException newQuoteServerThread start 启动一个QuoteServerThread线程 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 3Datagram QuoteServerThread javaimportjava io importjava util 服务器线程publicclassQuoteServerThreadextendsThread protectedDatagramSocketsocket null 记录和本对象相关联的DatagramSocket对象protectedBufferedReaderin null 用来读文件的一个ReaderprotectedbooleanmoreQuotes true 标志变量 是否继续操作 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 3Datagram 14 3 1基于UDP的简单的Client Server程序设计 服务器端 publicQuoteServerThread throwsIOException 无参数的构造函数this QuoteServerThread 以QuoteServerThread为默认值调用带参数的构造函数 publicQuoteServerThread Stringname throwsIOException super name 调用父类的构造函数socket newDatagramSocket 4445 在端口4445创建数据报套接字try in newBufferedReader newFileReader one liners txt 打开一个文件 构造相应的BufferReader对象 catch FileNotFoundExceptione 异常处理System err println Couldnotopenquotefile Servingtimeinstead 打印出错信息 第050课网络编程 publicvoidrun 线程主体 while moreQuotes try byte buf newbyte 256 创建缓冲区DatagramPacketpacket newDatagramPacket buf buf length 由缓冲区构造DatagramPacket对象socket receive packet 接收数据报StringdString null if in null dString newDate toString 如果初始化的时候打开文件失败了 则使用日期作为要传送的字符串 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 3Datagram elsedString getNextQuote 否则调用成员函数从文件中读出字符串buf dString getByte 把String转换成字节数组 以便传送InetAddressaddress packet getAddress 从Client端传来的Packet中得到Client地址intport packet getPort 和端口号packet newDatagramPacket buf buf length address port 根据客户端信息构建DatagramPacketsocket send packet 发送数据报 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 3Datagram catch IOExceptione 异常处理e printStackTrace 打印错误栈moreQuotes false 标志变量置false 以结束循环 socket close 关闭数据报套接字 protectedStringgetNextQuotes 成员函数 从文件中读数据StringreturnValue null try 第050课网络编程 3 1基于UDP的简单的Client Server程序设计 3Datagram if returnValue in readLine null 从文件中读一行 如果读到了文件尾in close 关闭输入流moreQuotes false 标志变量置false 以结束循环returnValue Nomorequotes Goodbye 置返回值 否则返回字符串即为从文件读出的字符串 catch IOEceptione 异常处理returnValue IOExceptionoccurredinserver 置异常返回值 returnreturnValue 返回字符串 第050课网络编程 3 1基于UDP的简单的Client Serv

温馨提示

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

评论

0/150

提交评论