计算机网络原理实验报告.docx
- 文档编号:10528613
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:22
- 大小:169.67KB
计算机网络原理实验报告.docx
《计算机网络原理实验报告.docx》由会员分享,可在线阅读,更多相关《计算机网络原理实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
计算机网络原理实验报告
计算机网络原理实验报告
多线程Web服务器
1实验目的:
用JAVA语言开发一个多线程的WEB服务器,它能并行服务于多个请求。
发送网页文件,让网页文件能够通过在URL中制定端口号来被浏览器使用。
2实验代码及截图
classConnectionThreadextendsThread{
Socketclient;
intcounter;
publicConnectionThread(Socketcl,intc){
client=cl;
counter=c;
}
publicvoidrun()//线程体
{
try{
StringdestIP=client.getInetAddress().toString();//客户机IP地址
intdestport=client.getPort();//客户机端口号
System.out.println("Connection"+counter+":
connectedto"+destIP+"onport"+destport+".");
PrintStreamoutstream=newPrintStream(client.getOutputStream());
DataInputStreaminstream=newDataInputStream(client.getInputStream());
Stringinline=instream.readLine();//读取Web浏览器提交的请求信息
System.out.println("Received:
"+inline);
if(getrequest(inline)){//如果是GET请求
Stringfilename=getfilename(inline);
Filefile=newFile(filename);
if(file.exists()){//若文件存在,则将文件送给Web浏览器
System.out.println(filename+"requested.");
outstream.println("HTTP/1.0200OK");
outstream.println("MIME_version:
1.0");
outstream.println("Content_Type:
text/html");
intlen=(int)file.length();
outstream.println("Content_Length:
"+len);
outstream.println("");
sendfile(outstream,file);//发送文件
outstream.flush();
}else{//文件不存在时
Stringnotfound="
Error404-filenotfound
";outstream.println("HTTP/1.0404nofound");
outstream.println("Content_Type:
text/html");
outstream.println("Content_Length:
"+notfound.length()+2);
outstream.println("");
outstream.println(notfound);
outstream.flush();
}
}
longm1=1;
while(m1<11100000)
{
m1++;
}//延时
client.close();
}catch(IOExceptione){
System.out.println("Exception:
"+e);
}
}
/*获取请求类型是否为“GET”*/
booleangetrequest(Strings){
if(s.length()>0)
{
if(s.substring(0,3).equalsIgnoreCase("GET"))
returntrue;
}
returnfalse;
}
/*获取要访问的文件名*/
Stringgetfilename(Strings){
Stringf=s.substring(s.indexOf('')+1);
f=f.substring(0,f.indexOf(''));
try{
if(f.charAt(0)=='/')
f=f.substring
(1);
}catch(StringIndexOutOfBoundsExceptione){
System.out.println("Exception:
"+e);
}
if(f.equals(""))f="index.html";
returnf;
}
/*把指定文件发送给Web浏览器*/
voidsendfile(PrintStreamouts,Filefile){
try{
DataInputStreamin=newDataInputStream(newFileInputStream(file));
intlen=(int)file.length();
bytebuf[]=newbyte[len];
in.readFully(buf);
outs.write(buf,0,len);
outs.flush();
in.close();
}catch(Exceptione){
System.out.println("Errorretrievingfile.");
System.exit
(1);
}
}
}
publicclasswebsever{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
inti=1,PORT=8081;
ServerSocketserver=null;
Socketclient=null;
try{
server=newServerSocket(PORT);
System.out.println("WebServerislisteningonport"+server.getLocalPort());
while(true){
client=server.accept();//接受客户机的连接请求
newConnectionThread(client,i).start();
i++;
}
}catch(Exceptione){
System.out.println(e);
}
}
}
3实验软硬件环境
eclipse
Windowsxp
IE浏览器
4实验步骤
(1)连接:
Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
为发送者提供一个图形界面,其中包含:
发送电子邮件地址、接受者电子邮件地址、邮件主题和本身。
开发一个Internet上的使用STMP协议的网络服务器的邮件客户端,在WindowsXP,Windows7系统下,使用JAVA语言开发,并最终运行该程序。
2实验部分代码及截图:
在发件人框中填写相应的信息,点击发送按钮即可向目标邮箱发送邮件。
publicclassMailMessage{
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
SendFrameframe=newSendFrame();
frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();}
/**
*Createtheframe.
*/
publicSendFrame(){
thisFrame=this;
setTitle("JavaMailclient");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,328);
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabellblFrom=newJLabel("from:
");
lblFrom.setBounds(10,10,54,22);
contentPane.add(lblFrom);
JLabellblTo=newJLabel("To:
");
lblTo.setBounds(10,42,42,22);
contentPane.add(lblTo);
JLabellblSubject=newJLabel("Subject:
");
lblSubject.setBounds(10,74,54,22);
contentPane.add(lblSubject);
txt_From=newJTextField();
txt_From.setEditable(false);
txt_From.setText("1025674623@");
txt_From.setBounds(49,11,383,21);
contentPane.add(txt_From);
txt_From.setColumns(10);
txt_To=newJTextField();
txt_To.setText("1025674623@");
txt_To.setColumns(10);
txt_To.setBounds(49,42,383,21);
contentPane.add(txt_To);
text_Subject=newJTextField();
text_Subject.setText("作业2:
邮件客户机");
text_Subject.setColumns(10);
text_Subject.setBounds(66,73,366,21);
contentPane.add(text_Subject);
JLabellblMassage=newJLabel("Massage:
");
lblMassage.setBounds(10,101,64,15);
contentPane.add(lblMassage);
JButtonbtnQuit=newJButton("Quit");
btnQuit.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
thisFrame.dispose();
}
});
btnQuit.setBounds(295,271,137,23);
contentPane.add(btnQuit);
JScrollPanescrollPane=newJScrollPane();
scrollPane.setBounds(10,229,422,-101);
contentPane.add(scrollPane);
Panelpanel=newPanel();
panel.setBounds(10,115,422,156);
contentPane.add(panel);
panel.setLayout(null);
ScrollPanescrollPane_1=newScrollPane();
scrollPane_1.setBounds(0,0,422,156);
panel.add(scrollPane_1);
finalTextAreaSend_TextArea=newTextArea();
Send_TextArea.setText("你好!
这是一封测试邮件");
Send_TextArea.setBounds(0,0,440,170);
scrollPane_1.add(Send_TextArea);
JButtonbtnSend=newJButton("Send");
btnSend.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
Stringtxtfrom=txt_From.getText();
Stringtxtto=txt_To.getText();
Stringtxtsubject=text_Subject.getText();
Stringsendtextarea=Send_TextArea.getText();
try{
MailMessagemessage=newMailMessage();
message.setFrom(txtfrom);//发件人
message.setTo(txtto);//收件人
Stringserver="";//邮件服务器
message.setSubject(txtsubject);//邮件主题
message.setContent(sendtextarea);//邮件内容
message.setDatafrom(txtfrom);//发件人,在邮件的发件人栏目中显示
message.setDatato(txtto);//收件人,在邮件的收件人栏目中显示
message.setUser("1025674623");//登陆邮箱的用户名
message.setPassword("zjr*******(保密)");//登陆邮箱的密码
SendFramesmtp=newSendFrame(server,25);
booleanflag;
flag=smtp.sendMail(message,server);
if(flag){
JOptionPane.showMessageDialog(null,"信息已成功发送!
","提示",JOptionPane.INFORMATION_MESSAGE);
}
else{
JOptionPane.showMessageDialog(null,"邮件发送失败!
","提示",JOptionPane.INFORMATION_MESSAGE);
}
//System.out.println("iuhfihulaeihba");
}catch(UnknownHostExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}catch(IOExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
//JOptionPane.showMessageDialog(null,"信息已成功发送!
","提示",JOptionPane.INFORMATION_MESSAGE);
//System.out.println(txtfrom+"\n"+txtto+"\n"+txtsubject+"\n"+sendtextarea);
}
});
btnSend.setBounds(10,271,144,23);
contentPane.add(btnSend);
JButtonbtnClear=newJButton("Clear");
btnClear.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
txt_To.setText("");
text_Subject.setText("");
Send_TextArea.setText("");
JOptionPane.showMessageDialog(null,"信息删除成功!
","提示",JOptionPane.INFORMATION_MESSAGE);
}
});
btnClear.setBounds(149,271,150,23);
contentPane.add(btnClear);
}
privatebooleandebug=true;
BASE64Encoderencode=newBASE64Encoder();//用于加密后发送用户名和密码
privateSocketsocket;
publicSendFrame(Stringserver,intport)throwsUnknownHostException,IOException{
try{
socket=newSocket(server,25);
}catch(SocketExceptione){
//System.out.println(e.getMessage());
}catch(Exceptione){
e.printStackTrace();
}finally{
//System.out.println("已经建立连接!
");
}
}
//注册到邮件服务器
publicvoidhelo(Stringserver,BufferedReaderin,BufferedWriterout)throwsIOException{
intresult;
result=getResult(in);
//连接上邮件服务后,服务器给出220应答
if(result!
=220){
thrownewIOException("连接服务器失败");
}
result=sendServer("HELO"+server,in,out);
//HELO命令成功后返回250
if(result!
=250)
{
thrownewIOException("注册邮件服务器失败!
");
}
}
privateintsendServer(Stringstr,BufferedReaderin,BufferedWriterout)throwsIOException{
out.write(str);
out.newLine();
out.flush();
if(debug)
{
//System.out.println("已发送命令:
"+str);
}
returngetResult(in);
}
publicintgetResult(BufferedReaderin){
Stringline="";
try{
line=in.readLine();
if(debug){
//System.out.println("服务器返回状态:
"+line);
}
}catch(Exceptione){
e.printStackTrace();
}
//从服务器返回消息中读出状态码,将其转换成整数返回
StringTokenizerst=newStringTokenizer(line,"");
returnInteger.parseInt(st.nextToken());
}
publicvoidauthLogin(MailMessagemessage,BufferedReaderin,BufferedWriterout)throwsIOException{
intresult;
result=sendServer("AUTHLOGIN",in,out);
if(result!
=334){
thrownewIOException("用户验证失败!
");
}
result=sendServer(encode.encode(message.getUser().getBytes()),in,out);
if(result!
=334){
thrownewIOException("用户名错误!
");
}
result=sendServer(encode.enco
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 原理 实验 报告