高层协议POP3与HTTPWord格式文档下载.docx
- 文档编号:20471459
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:11
- 大小:18.95KB
高层协议POP3与HTTPWord格式文档下载.docx
《高层协议POP3与HTTPWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《高层协议POP3与HTTPWord格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
DELEmsg将指定的邮件标记为删除。
NOOP空操作。
RSET取消所有的删除标记。
QUIT结束会话。
TOPmsgn下载指定邮件的头信息及前面的n行。
UIDL[msg]获得所有邮件或指定邮件的唯一标识符。
USERname标示将要访问的邮箱(即用户名字)。
PASSpw发送由USER命令指定的用户的密码(以明文发送)。
㈡POP3客户程序实例
下面的MailStat.java程序演示了POP3协议的基本用法。
该程序的功能是检查指定服务器上的邮件状态。
【MailStat.java】
publicclassMailStat{
privatestaticfinalintPOP3_PORT=110;
publicstaticvoidmain(String[]args){
Stringhost;
InetAddresshostAddress;
Stringusername;
Stringpassword;
SocketmailSocket;
BufferedReadersocketInput;
DataOutputStreamsocketOutput;
//检查参数
if(args.length<
3){
"
用法:
MailStat[服务器][用户名字][密码]"
);
}
else{
host=args[0];
username=args[1];
password=args[2];
try{
hostAddress=InetAddress.getByName(host);
正在连接服务器"
+hostAddress+"
..."
mailSocket=newSocket(host,POP3_PORT);
socketInput=newBufferedReader(
newInputStreamReader(mailSocket.getInputStream()));
socketOutput=newDataOutputStream(mailSocket.getOutputStream());
//从服务器读入初始应答
readReply(socketInput);
//验证身份
sendCommand(socketOutput,"
USER"
+username);
PASS"
+password);
//获得状态信息
STAT"
//结束会话
QUIT"
}finally{
mailSocket.close();
catch(ExceptiontheException){
;
System.exit(0);
/**
*sendCommand()发送一个POP3命令
*/
privatestaticvoidsendCommand(DataOutputStreamout,Stringcommand)
throwsIOException{
…略…
*readReply()读取并显示POP3服务器的应答
privatestaticStringreadReply(BufferedReaderreader)
throwsIOException,Exception{
}
下面是其算法说明:
获得命令行参数,包括邮件主机、用户名称、密码。
如果没有指定这些参数,则输出提示信息并退出。
获得邮件服务器的IP地址。
打开与邮件服务器通讯的Socket。
引用Socket的输入、输出流。
读取服务器的初始应答信息。
发送用户名字并读取应答。
发送密码并读取应答。
读取状态信息(邮件总数,邮箱大小)。
结束会话。
关闭Socket并退出。
为简单计,我们没有为MailStat加上任何“特色”功能。
您可以自己修改它使之更为实用,比如增加每隔几分钟检查一次的功能,或同时检查多个邮箱的功能,或一个图形用户界面,等等。
㈢HTTP协议简介
HTTP协议也是一种高级网络协议,是浏览器与Web服务器通信的标准协议。
HTTP1.1规范可以在RFC2616找到,HTTP1.0规范可以在RFC1945找到。
有关HTTP的基本操作为:
服务器在端口80监听。
客户程序(如浏览器)连接到服务器并发送请求信息。
服务器发送应答信息。
由客户程序或服务器关闭连接。
客户请求的一般格式为:
<
command>
/<
url>
<
HTTP-version>
CRLF
[<
keyword>
:
value>
CRLF]
...
其中:
<
=请求服务器处理的命令,如
GET——提取文件
HEAD——提取文件头
POST——发送表单数据
PUT——上载文件
=要求提取文件的URL
=客户程序能够理解的HTTP版本,如
HTTP/1.0、HTTP/1.1等等
=提供给服务器的附加信息关键词。
常见的关键词如:
Accept——可以接受的数据类型
User-Agent——用来标识浏览器
下面是客户请求的几个示例:
●GET/foo.htmlHTTP/1.1
Accept:
text/html
text/plain
image/gif
image/jpg
User-Agent:
Netscape/4.5
服务器应答的基本格式如下:
response-code>
Server:
server-identity>
MIME-version:
MIME-version>
Content-type:
content-type>
Content-length:
11160
CRLF
data>
=服务器所使用的HTTP版本号。
=应答类型。
它由两部分组成,即一个编号及文本说明。
最常见的应答是“200OK”和“404NotFound”。
编号为200-299的应答表示成功,300-399表示重定向,400-499表示客户错误,500-599表示服务器错误。
=服务器标识。
=服务器所使用的MIME版本号。
=所发送内容的MIME类型:
text/html,image/gif等。
content-length>
=以字节计的发送内容长度。
=内容。
下面是服务器应答的一个实例:
HTTP/1.1200OK
NCSA/1.4.2
1.0
37756
html>
head>
<
title>
Foo<
/title>
/head>
body>
/body>
/html>
㈣一个多线程HTTP服务器的实现
下面的HttpServer.java给出了一个简单的Web服务器。
它仅由两个类构成,只支持HTML、TEXT、GIF和JPEG文件的GET命令。
【HttpServer.java】
publicclassHttpServer{
privatestaticintDEFAULT_PORT=80;
privateintserverPort;
intport=DEFAULT_PORT;
//获取命令行参数
if(args.length>
=1){
port=Integer.parseInt(args[0]);
}catch(NumberFormatExceptionex){
Usage:
HttpServer[端口]"
(newHttpServer(port)).go();
publicHttpServer(){
this(DEFAULT_PORT);
publicHttpServer(intport){
super();
this.serverPort=port;
*启动服务器
publicvoidgo(){
ServerSockethttpSocket;
SocketclientSocket;
HttpRequestThreadrequestThread;
httpSocket=newServerSocket(serverPort);
HttpServer在端口"
+serverPort+"
监听."
while(true){
clientSocket=httpSocket.accept();
requestThread=newHttpRequestThread(clientSocket);
requestThread.start();
httpSocket.close();
}catch(Exceptionex){
下面是它的算法说明:
从命令行获取端口参数。
若没有指定,则默认为80。
在指定的端口打开一个服务器Socket。
开始循环:
等待客户程序的连接请求,当请求到达时获得客户Socket的引用。
创建一个新的请求服务线程,并以客户Socket为参数启动该线程。
结束循环。
关闭服务器Socket并退出。
客户请求的服务线程类实现如下:
【HttpRequestThread.java】
publicclassHttpRequestThreadextendsThread{
privateSocketclientSocket;
publicHttpRequestThread(SocketclientSocket){
this.clientSocket=clientSocket;
*启动服务线程
publicvoidrun(){
OutputStreamout;
BufferedReaderin;
Stringline;
StringTokenizertokenizer;
Stringmethod;
Stringurl;
StringhttpVersion;
//引用输入、输出流
out=clientSocket.getOutputStream();
in=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));
//从客户请求读入一行
line=in.readLine();
tokenizer=newStringTokenizer(line);
if(tokenizer.countTokens()==3){
//获得命令类型、URL、HTTP版本号
if(method.equalsIgnoreCase("
get"
)){
sendResponse(out,url);
clientSocket.close();
}catch(Exceptionex){
RequestThread:
"
+ex.toString());
*将服务器应答发送给浏览器
publicvoidsendResponse(OutputStreamout,Stringurl)throwsIOException{
服务线程的算法说明如下:
打印客户请求内容。
如果客户请求命令为GET,则发送应答:
若所请求的文件存在,则将该文件作为应答的内容发送;
否则,发送“404NotFound”。
编译这两个Java类,执行“javaHttpServer”之后,就可以用浏览器打开class文件所在目录下的页面文件了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高层 协议 POP3 HTTP