网络编程技术第十周_第1页
网络编程技术第十周_第2页
网络编程技术第十周_第3页
网络编程技术第十周_第4页
网络编程技术第十周_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第五次课Socket编程(3)JavaMail编程(1),Socket编程(2),零、习题讲解,一、数据报式套接字,五、小结和作业,二、常用的邮件协议,三、环境配置,一、数据报式套接字,1、UDP协议,用户数据报协议:UserDatagramProtocol一种面向无连接的传输层协议,提供面向操作的简单的不可靠数据传送服务。在网络中它与TCP协议一样用于处理数据包。UDP协议在发送数据时并不刻意追求数据包会完全发送出去,也不能担保它们抵达的顺序与它们发出时一样,所以它是一种不可靠协议。UDP传输数据之前客户端和服务器端不建立连接,当它想发送数据时则获取来自应用程序的数据,并尽可能快地把它放到网络上。由于传输数据时不需建立连接,不需维护连接状态,因此一台服务器可同时向多个客户传输相同的数据。,一、数据报式套接字,2、数据报式套接字中所需的类,DatagramPacket类数据报包封装类。把具体的要传输的信息,包含IP地址,端口号和需要传输的数据等封装在称为数据报包(Datagram)的UDP包中。DatagramSocket类用于收发UDP数据报的套接字接口类。为发送数据,要将数据封装到DatagramPacket中,使用DatagramSocket发送该包。为接收数据,要从DatagramSocket中接收一个DatagramPakcet对象,然后解析该包的内容,一、数据报式套接字,3、DatagramSocket类,功能该类表示用来发送和接收数据报包的套接字(Socket)。要收发DatagramPacket,必须创建一个数据报套接字DatagramSocket。,构造方法publicDatagramSocket()throwsSocketException功能:创建用于数据报通信的socket对象,由本地主机自动指定的一个可用的端口号。DatagramSocketsocket=newDatagramSocket();/创建一个用于收发数据报的DatagramSocket对象,一、数据报式套接字,3、DatagramSocket类,构造方法publicDatagramSocket(intport)throwsSocketException功能:创建用于数据报通信的socket对象,并且把它绑定到本地主机指定的端口port。publicDatagramSocket(intport,InetAddressaddr)throwsSocketException功能:创建用于数据报通信的socket对象,并绑定到指定的本地地址addr的指定端口port。DatagramSocketsocket=newDatagramSocket(3000);/在端口3000创建用于通信的Socket对象,一、数据报式套接字,3、DatagramSocket类,常用方法一、发送方法publicvoidsend(DatagramPacketp)throwsIOException功能:将数据报包p发送出去。二、接收方法publicsynchronizedvoidreceive(DatagramPacketp)throwsIOException从网络接收一个UDP数据报包,并存储在DatagramPacket类对象p中。该数据报包p还包含发送方的IP地址和发送方主机的端口号。,一、数据报式套接字,3、DatagramSocket类,publicintgetLocalPort()功能:获取该socket绑定的本地主机的端口号。publicvoidclose()功能:释放该数据报socket所占用的端口。,常用方法publicInetAddressgetLocalAddress()功能:获取该socket绑定的本地地址。,一、数据报式套接字,4、DatagramPacket类,功能是进行数据报通信的基本单位。包含了IP地址、端口号和需要传输的数据等。在发送和接收数据报时,要创建DatagramPakcet类对象作为数据的载体。,构造方法之一:发送用的数据报publicDatagramPacket(byteibuf,intilength,InetAddressiaddr,intiport)构造方法之二:接收用的数据报publicDatagramPacket(byteibuf,intilength),一、数据报式套接字,4、DatagramPacket类,构造方法之一:发送用的数据报publicDatagramPacket(byteibuf,intilength,InetAddressiaddr,intiport)功能:创建一个用于发送数据报的DatagramPacket类对象。参数:ibuf:存储数据报的缓冲区。ilength:发送数据报的长度,必须小于等于ibuf.length。iaddr:数据报要发送到的目的IP地址。iport:数据报要发送到的目的地址的端口号。,一、数据报式套接字,4、DatagramPacket类,构造方法之一:发送用的数据报publicDatagramPacket(byteibuf,intilength,InetAddressiaddr,intiport)举例:Stringdate=newDate().toString();/获取服务器当前时间buf=date.getBytes();/将当前日期时间存入字节数组bufpacket=newDatagramPacket(buf,buf.length,addr,port);/构造发送数据报包socket.send(packet);/发送数据报,一、数据报式套接字,4、DatagramPacket类,构造方法之一:接收用的数据报publicDatagramPacket(byteibuf,intilength)功能:创建一个用于接收数据报的DatagramPacket类对象。参数:ibuf:存储数据报的缓冲区。在数据报通信中,发送和接收一个数据报,都需提供一个缓冲区,用来安置发送和接收到的数据报。ilength:接收数据报的长度,必须小于等于ibuf.length。举例:DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);/接收数据报包,一、数据报式套接字,4、DatagramPacket类,常用方法之解析数据报包的方法(1)publicsynchronizedInetAddressgetAddress()功能:返回存放在接收或发送的数据报中的IP地址。(2)publicsynchronizedintgetPort()功能:返回存放在接收或发送的数据报中的端口号。(3)publicsynchronizedbytegetData()功能:返回存放在数据报中的数据。(4)publicsynchronizedintgetLength()功能:返回数据报中数据的长度。,一、数据报式套接字,4、DatagramPacket类,常用方法之解析数据报包的方法举例InetAddressaddr=packet.getAddress();intport=packet.getPort();/解析收到的数据报包packet,返回客户端的IP地址和端口号Stringtime=newString(packet.getData();/解析数据报包,获取其中的数据内容,一、数据报式套接字,4、DatagramPacket类,常用方法之封装数据报包的方法(5)publicsynchronizedvoidsetAddress(InetAddressiaddr)功能:设置发送数据报的目的地址为iaddr。(6)publicsynchronizedvoidsetPort(intiport)功能:设置发送数据报的目的地址的端口号为iport。(7)publicsynchronizedvoidsetData(byteibuf)功能:设置数据报中的数据内容为字节数组ibuf的数据。(8)publicsynchronizedvoidsetLength(intilength)功能:设置数据报中的数据的长度为ilength。,一、数据报式套接字,5、编程基本步骤,开发基于UDP协议的网络应用程序时,需分别编写客户端和服务器端两个应用程序,这两个程序的基本架构相似。基本步骤如下:(1)建立一个DatagramSocket对象;(2)创建用于发送数据的DatagramPacket对象;封装:数据内容,数据长度,目的IP地址,目的端口号或创建用于接收数据的DatagramPacket对象;封装:存储数据报的缓冲区ibuf及缓冲区长度(3)利用DatagramSocket类方法receive()或send()接收或发送数据报包。,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java和TimeServer_UDP.java服务器开启了一个查询本机时间的服务,客户机如果需要查询服务器当前时间,就向服务器发送一个UDP数据报包,服务器将其当前的系统时间封装在一个UDP数据报包中发送给客户机。,TimeServer_UDP.java运行界面,TimeClient_UDP.java运行界面,一、数据报式套接字,5、编程基本步骤,举例-2:TimeServer_UDP.java和TimeServer_UDP.java服务器开启了一个查询本机时间的服务,客户机如果需要查询服务器当前时间,就向服务器发送一个UDP数据报包,服务器将其当前的系统时间封装在一个UDP数据报包中发送给客户机。思路1.客户机向服务器发送一个UDP数据报包2.服务器从收到的DatagramPacket包中解析出客户机的IP地址和端口号3.然后将本机当前时间封装在一个以客户机IP地址和端口号的数据报包中,发送给客户机。4.客户机收到后将时间解析出来显示。,一、数据报式套接字,5、编程基本步骤,举例-1:服务器端,在端口3000创建DatagramSocket对象socket,构造接收数据报包的DataPacket对象packetsocket.receive(packet);,进入循环,继续接收其他客户机的数据报包,获取系统当前时间并转换为字符串:Stringdate=newDate().toString();buf=date.getBytes();,从客户端收到的数据报包中packet中解析出客户机的IP地址和端口号,创建确定数据内容、IP地址和端口号的数据报包,并通过socket.send(packet)将其发送给客户机,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java关键代码1.构造DatagramSocketDatagramSocketsocket=newDatagramSocket(3000);2.构造接收数据报包bytebuf=newbyte256;DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);,一、数据报式套接字,5、编程基本步骤,举例-1:TimeServer_UDP.java关键代码3.解析数据报包InetAddressaddr=packet.getAddress();intport=packet.getPort();,4.构造发送数据报包Stringdate=newDate().toString();buf=date.getBytes();packet=newDatagramPacket(buf,buf.length,addr,port);socket.send(packet);,一、数据报式套接字,5、编程基本步骤,举例-1:TimeClient_UDP.java程序流程图,创建要发送的数据报包packet,以客户机的任意端口号创建DatagramSocket对象socketsocket.send(packet);将packet数据报包发送给服务器,创建接收的数据报包packet通过socket.receive(packet)从服务器接收数据报包,存放在packet中,通过packet.getData()方法从packet中解析出服务器发送过来的时间,并显示,关闭socket,一、数据报式套接字,5、编程基本步骤,举例-1:TimeClient_UDP.java关键代码1.构造socketDatagramSocketsocket=newDatagramSocket();2.构造发送数据报包并发送DatagramPacketpacket=newDatagramPacket(msg,msg.length,InetAddress.getByName(host),port);DatagramSocketsocket=newDatagramSocket();socket.send(packet);,一、数据报式套接字,5、编程基本步骤,举例-1:TimeClient_UDP.java关键代码,3.构造接收数据报包并解析packet=newDatagramPacket(msg,msg.length);socket.receive(packet);Stringtime=newString(packet.getData();System.out.println(侦听服务器:+host+的当前时间是:+time);,一、数据报式套接字,6、编程总结,举例-1:TimeClient_UDP.java和TimeClient_UDP.java问题1.客户端发送给服务器的数据报包中封装的数据部分的内容是什么?2.服务器发送给客户端的数据报包中封装的数据部分的内容是什么?3.服务器端是如何知道客户端的IP地址和端口号的?4.DatagramPacket构造的发送数据报包和接收数据报包对象有何不同?,一、数据报式套接字,6、编程总结,举例-1:TimeClient_UDP.java和TimeClient_UDP.java程序的执行流程?,服务器,客户端,封装一个数据报包,DatagramSocketsocket=newDatagramSocket(3000);System.out.println(等待接收数据.);,启动后监听客户的请求,Stringhost=localhost;bytemsg=newbyte256;InetAddressaddr=InetAddress.getByName(host);System.out.println(侦听主机为:+addr);DatagramPacketpacket=newDatagramPacket(msg,msg.length,addr,3000);,一、数据报式套接字,6、编程总结,举例-2:TimeClient_UDP.java和TimeClient_UDP.java程序的执行流程?,将封装好的数据报包发送给服务器,服务器,客户端,封装一个数据报包,启动后监听客户的请求,DatagramSocketsocket=newDatagramSocket();socket.send(packet);,接收此数据报包,bytebuf=newbyte256;DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);,一、数据报式套接字,6、编程总结,举例-2:TimeClient_UDP.java和TimeClient_UDP.java,将封装好的数据报包发送给服务器,服务器,客户端,封装一个数据报包,启动后监听客户的请求,接收此数据报包,解析此数据报包,取得客户端主机的IP地址和端口号addr和port,InetAddressaddr=packet.getAddress();intport=packet.getPort();,取得服务器当前时间time,将其封装在数据报包packet中,并发送给客户端。,packet=newDatagramPacket(buf,buf.length,addr,port);socket.send(packet);,接收服务器端发送过来的数据报包packet,packet=newDatagramPacket(msg,msg.length);socket.receive(packet);,解析收到的数据报包packet,Stringtime=newString(packet.getData();System.out.println(侦听主机为+host+的当前日期时间为:+time);,关闭socket:socket.close();,一、数据报式套接字,7、问题,思考:1.UDP套接字与TCP套接字编程存在什么区别?2.观察TimeClient_UDP.java,如何将下图红色框线表示的部分去掉?,一、因特网电子邮件系统的组成,二、常用的邮件协议,用户代理邮件服务器简单邮件传输协议SMTP1.用户代理useragent,又称为邮件阅读器,允许用户阅读、回复、转发、保存和撰写报文。俗称电子邮件客户端软件。常用的电子邮件客户端软件Foxmail,Outlook,Dreammail,KooMail,IncrediMail,Becky!,PocoMail,Thunderbird,TheBat!,Eudora,一、因特网电子邮件系统的组成,二、常用的邮件协议,2.邮件服务器mailserver,电子邮件体系结构的核心。每个用户可以在某个邮件服务器上注册一个邮箱,来管理和维护发送给他的邮件。如126,163邮件服务器等。发送邮件服务器和接收邮件服务器发送邮件服务器:使用邮件发送协议SMTP来发送邮件到接收服务器,又称为SMTP服务器。接收邮件服务器:使用邮件接收协议POP3或者IMAP协议接收邮件,又称为POP3服务器或者IMAP服务器。,一、因特网电子邮件系统的组成,二、常用的邮件协议,3.简单邮件传输协议SMTP使用TCP可靠数据传输服务,在端口25进行监听,将邮件从发送方的邮件服务器发送到接收方的邮件服务器。SMTP的两个组成部分:SMTP客户端:当一个邮件服务器向其他邮件服务器发送邮件时,表现为SMTP客户机。SMTP服务器:当一个邮件服务器从其他邮件服务器接收邮件时,表现为一个SMTP的服务器。,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件传送过程:第一步客户端发送MAIL命令,代表发送邮件的开始。服务器则以250OK作为响应,表明准备接收。MAIL命令的一般格式为:MAILFROM:reverse-pathCRLFreverse-path为发送者邮箱地址,如abc。CRLF为回车、换行符。SMTP命令均以CRLF作为结束,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件传送过程:第二步客户端发送RCPT命令,以标识该电子邮件的接收者,可以有多个RCPT。RCPT命令的一般格式为:RCPTTO:forward-pathCRLFforward-path为各个邮件接收者的地址。如果命令被接收,服务器发送250OK作为响应;若接收者地址无效则返回550Failure作为响应。,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件传送过程:第三步用DATA命令发送邮件。此时客户端在DATA命令成功后向服务器发送邮件内容如果服务器接收到DATA命令,则向客户端发送354应答作为响应。此时客户端在接收到这个响应后需立即发送包含邮件的文本信息。SMTP协议规定邮件以一个只包含一个句号“.”的行作为邮件结束。当服务器接收到这样一行后,结束邮件内容的接收并以250OK作为响应。,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件发送过程Server:SMTPserviceready服务器已准备好。Client:HELOmypc主机mypc要与服务器交互信息Server:sayshellotomypc服务器同意与mypc交互信息Client:MAILFROM:gwu发送邮件(发送者地址)Server:250senderOKokClient:RCPTTO:xxx接收者地址Server:250recipientOKok,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件发送过程Client:DATA开始发送邮件内容Server:354sendmail;endwith“.”onalinebyitself同意发送邮件内容Client:Hello,ImissyouverymuchServer:250messageaccept邮件内容已接收完Client:QUIT请求结束本次交互Server:221wgxclosingconnection同意结束本次交互。,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP邮件发送过程,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP的常用命令,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP的常用命令,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP应答码,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP应答码,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP应答码,二、协议简介,二、常用的邮件协议,1.简单邮件传输协议SMTPSMTP应答码,二、协议简介,二、常用的邮件协议,2.邮件访问协议POP3第三版邮局协议IMAP因特网邮件访问协议HTTP,二、协议简介,二、常用的邮件协议,2.邮件访问协议,1)POP3第三版邮局协议:POP协议(PostOfficeProtocol)又称邮局协议,它使工作站可以从服务器上取得邮件,而服务器为它暂时保存邮件。它运行于TCP之上,默认在110端口侦听。POP3协议适用于Client/Server模式。它主要工作在离线方式下。目前的邮件服务器基本上都支持通过POP3协议接收。POP3协议规定,邮件客户端程序需要接收电子邮件时,它必须同POP3邮件服务器建立一个双向连接。,二、协议简介,二、常用的邮件协议,2.邮件访问协议-POP3第三版邮局协议,1.建立连接阶段用户代理打开一个到邮件服务器110端口的TCP连接后,POP3协议就开始工作。2.用户验证阶段用户代理以明文形式传输用户名和口令以鉴别用户。,3.邮件操作阶段取回报文,对邮件做或取消删除标记,获取邮件统计信息。,4.断开连接阶段客户机发出quit命令结束该POP会话,邮件服务器删除那些被标记为删除的报文。,POP3邮件服务器的应答码只有两种:+OK和-ERR。+OK表示正常-ERR表示错误。,二、协议简介,二、常用的邮件协议,2.邮件访问协议2)IMAP协议InternetMailAccessProtocol,又称Internet邮件访问协议,是更高级的用于接收邮件的协议。它对POP3的存储转发限制提供了重要的改进。,二、协议简介,二、常用的邮件协议,2.邮件访问协议传统电子邮件协议及其通信实体,用户代理,邮件服务器,邮件服务器,用户代理,撰写邮件,SMTP,报文发送队列中排队,TCP连接,SMTP,接收者的邮箱,POP3,IMAP,二、协议简介,二、常用的邮件协议,2.邮件访问协议3)HTTP基于Web的电子邮件,使用浏览器收发电子邮件。,浏览器,邮件服务器,邮件服务器,浏览器,撰写邮件,HTTP,报文发送队列中排队,TCP连接,SMTP,接收者的邮箱,HTTP,二、协议简介,二、常用的邮件协议,3.MIME协议MIME,MultipurposeInternetMailExtensionsandSecureMIME,多用途网际邮件扩充协议。MIME不是邮件传输协议,而是对邮件格式所做的规范。MIME说明了如何安排消息格式

温馨提示

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

评论

0/150

提交评论