2023年计算机网络原理实验报告_第1页
2023年计算机网络原理实验报告_第2页
2023年计算机网络原理实验报告_第3页
2023年计算机网络原理实验报告_第4页
2023年计算机网络原理实验报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

多线程Web服务器1实验目的:用JAVA语言开发一个多线程的WEB服务器,它能并行服务于多个请求。发送网页文献,让网页文献可以通过在URL中制定端标语来被浏览器使用。2实验代码及截图।且http://localhost:8081/index.htmZ收藏卖骨乱6.11e6.9且http--WWW.baidu4首页)http://localhost:8081/index.htm145646-456口收藏夹一:且6,118.6.9乱http-www.baidu«苜爽/凉交通大学好音InternetExplorer无法显示该网页InternetExplorer无法显示该网页您可以尝试以下操作:[诊断连接问题I9更多信息classConnectionThreadextendsThread{Socketc1ient;intcounter;提示1_区一①信息已成功发送!确定publicclassMaiIMessage{publicstaticvoidmain(String[]args){oEventQucue.invokcLater(newRunnable(){opublicvoidrun(){try{9。SendFrameframe=newSendFrame();ggframe.setVisib1e(true);g。}catch(Exceptione){§e.printStackTrace();}/**。*Createtheframe.叫pub1icSendFrame(){0。thisFrame=this;asetTitle("JavaMailclient");sctDcfaultC1oscOpcration(JFrame.EXIT_ON_CLOSE);selBounds(100,100,450,328);contentPane=newJPane1();ooconten(Pane.setBorder(newEmptyBorder(5,5,5,5));wsetContentPane(contentPane);»contentPane.setLayoul(null);3JLabelIblFrom=newJLabel("from:");MblFrom.setBounds(10,10,54,22);ocontentPane.add(lblFrom);0odLabeIIblTo=newJLabel("To:");«1blTo.setBounds(I0,42,42,22);contentPane.add(IblTo);。JLabe1lb1Subject=newJLabel(*'Subject:11);dbISubject.setBounds(10,74,54,22);aocontentPane.add(lblSubject);txt_From=newJTextField();8txt_From.sctEditable(fa1se);Mx(_From.setText("");4xt_From.setBounds(49,11,383,21):^contentPane.add(txl_From);。txt_From.setColumns(10);®txt_To=newJTextField();txt_To.setText("M);stxt_To.se(Columns(10);3txt_To.setBounds(49,42,383,21);contentPane,add(txt_To);8text_Subject=newJTextFie1d();otext_Subject.selText("作业2:邮件客户机)ext_Subject.setColumns(10);ootext_Subject.setBounds(66,73,366,21);contentPane.add(text_Subjecl);sJLabelIblMassage=newJLabel("Massage:");olblMassage.setBounds(10,101,64,15);contentPane.add(IblMassage);0000gjButtonbtnQuit=newJButton("Quit");»btnQuit.addActionListener(newActionListener(){opublievoidactionPcrformed(ActionEventc)(4hisFrame.dispose();,});0btnQuit.setBounds(295,271,137,23);contentPane.add(binQuit);0oJScro11PanescrollPane=newJScro11Pane();scrollPane.setBounds(10,229,422,-101);contentPane.add(scroUPanc);3Pane1pane1=newPanel();。paneLsetBounds(10,115,422,156);»contentPane.add(pane1);«pane1.setLayout(null);«ScrollPanescro11Pane_1=newScroIlPane();。scrollPane_1.setBounds(0,0,422,156);opanel.add(scro1IPane_1);gfina1TextAreaSend_TextArea=newTextArea();nd_TextArea.seiText("你好!这是一封测试邮件)。Send_TextArea.setBounds(0,0,440,170);scroIIPane_l.add(Scnd_TcxtArea);JButtonbtnSend=newJButton("Scnd");btnSend.addActionListener(newActionListener(){§pub1icvoidactionPerformed(ActionEvente){o®Stringtxtfrom=txt_From.getText();。。tringtxtto=txt_To.getText();aStringtxtsubject=text_Subject.geiText();gStringsendtextarea=Send_TextArea.getText();gtry(gMaiIMessagemessage=ncwMai1Messagc();8。。message.setFrom(txtfrom);//发件人3gmessage.setTo(txtto)^/收件人a。。Stringserver="";〃邮件服务器$。gmessage.selSubject(ixtsubject);〃邮件主题。。。message.setContent(sendtextarea);〃邮件内容3message.setDatafrom(txtfrom);〃发件人,在邮件的发件人栏目中显示。a。message.setDatato(txlto);〃收件人,在邮件的收件人栏目中显示。。message.setUser("");//登陆邮箱的用户名message,setPassword("zjr*******(保密)");〃登陆邮箱的密码“SendFramesmtp=newSendFrame(server,25);。booleanflag;03。f1ag=smtp.sendMail(message,server);agif(flag){尔。J0ptionPanc.showMessageDialog(nu11,"信息己成功发送!”,提醒”,JOptionPane.INF0RMAT10N_MESSAGE);3gO}geise{。。JOptionPane_showMessagcDia1og(nu11,"邮件发送失败!”,提醒",JOptionPane.INFORMATION.MESSAGE);°}a//System.out.println("iuhfihulaeihba");。。«}catch(UnknownHostExceptionel){TODOAuto-gencratcdcatchblock"1.printStackTrace();8。。}catch(IOExceptione1){。。。//TODOAuto—generatedcatchbiockg«>e1.printStackTrace();//®时0ptionPane.showMessageDialog(null,"信息己成功发送!","提醒",JOptionPane.INF0RMATION_MESSAGE);/A®System.out.print1n(txtfrom+"\n"+txtto+"\n"+txtsubject+"\n"+sendtextarea);g}“});tnSend.setBounds(10,271,144,23);»contcnIPanc.add(btnScnd);sJButtonbtnC1car=newJBu11onC'Clcar°);bmCIear.addActionListener(newActionLislener(){。apublievoidactionPerformed(ActionEvente){。txt_To.setTextC*");text_Subject.setText(n");gSend_TextArea.selText("");,dOptionPane.showMessageDialog(nu11,”信息删除成功!”,“提醒”,J0ptionPane.INFORMATION.MESSAGE);00|。});btnClear.se(Bounds(149»271,150,23);。conteniPane.add(btnClear);Jprivatebooleandebug=true;aBASE64Encoderencode=newBASE64Encoder();〃用于加密后发送用户名和密码。privateSocketsoeket;publicSendFrame(Stringserver,intport)throwsUnknownIIoslException,lOException{0try{«socket=newSocket(server,25);o}catch(SocketExceptione){//System,out.print1n(e.getMessage());o}catch(Exceptione){e.printStackTrace();}finally{//System.out.println("已经建立连接!))a)。//注册到邮件服务器。publicvoidhelo(Stringserver,BufferedReaderin,BufferedWriterout)throwsIOException(ointresu1t;§result=getResuk(in);。〃连接上邮件服务后,服务器给出22。应答if(result!=220){thrownew10Exception("连接服务器失败");°}。result=sendServer("HELO"+server,in,out);s//HELO命令成功后返回250oif(result!=250)a{。thrownewIOException("注册邮件服务器失败!”);))。privateintsendServer(Stringstr,BufferedReaderin,BufferedWriterout)throwsIOExccption{out.write(str):sout.ncwLinc();oout.flushO;。if(debug),(//•System.out.println("已发送命令:"+str);)returngetResult(in);°}publicintgetResuit(BufferedReaderin){oString1inc="iry(line=in.readLine();if(debug){//System.out.println("服务器返回状态:"4-line);。))catch(Exceptione){ae.printStackTrace();°}o//从服务器返回消息中读出状态码,将其转换成整数返I可。StringTokenizerst=newStringTokenizer(1ine,"");,returnInteger.parselnt(st.nextToken());)0。publicvoidauthLogin(MailMessagemessage,BufferedReaderin,BufferedWriterout)throwsIOException{intresult;oresu1t=sendScrvcr("AUTHLOGIN",in,out);if(resu1t!=334){thrownewIOException("用户验证失败!"):0)。result=sendServer(encode.encode(message.getUser().getBytes()),in,out):sif(result!=334){。thrownewI0Exception("用户名错误厂);resuIt=sendServer(encode,encode(message.getPassword().geiByles()),in,out);if(result!=235)(。thrownewIOException("验证失败!");)I//开始发送消息,邮件源地址publicvoidmai1from(Stringsource.BufferedReaderin,BuffercdWriterout)throws10Exception{sintresuIt;result=sendServer("MAILFROM:<"+source+">",in,out):if(result!=25O){。thrownewlOException("指定源地址错误");3)°}。//设立邮件收件人publicvoidrcpt(Slringtouchman,BufferedReaderin,BufferedWriterout)throwsIOException{3intresu1t;3result=scndServer("RCPTT0:<"+touchman+">',,in,out);if(result!=250){thrownewIOException("指定目的地址错误!");//邮件体pub1icConnectionThread(Socketcl,intc){。。。dient=cl;。counter=c;0°}0opublicvoidrun()//线程体°{-try{00。StringdestlP=client.getInetAddress().toString();//客户机工P地址。intdestport=c1ient.getPort();//客户机端标语。System.out.println("Connection"+counter+:connectedto"+destIP+"onportH+destport+".");®oPrintStreamoutstream=newPrintStream(c1ient.get0utputStream());。。DatalnputStreaminstream=newDataInputStream(client.getInputStream());。oStringinIine=instream.readLine();//读取Web浏览器提交的请求信息。System,out.print1n("Received:"+inline);O00o。。if(getrequest(inline)){//假如是GET请求Stringfilename=getfilename(in1ine);〃退出publievoidquit(BufferedReaderin,BufferedWriterout)throwsIOException{。intresult;result=sendServer("QUIT",in,out);Id〃发送邮件主程序pub1icboo1eansendMail(MailMessagemessage,Stringserver){,try{oBufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));。BufferedWriterout=newBufferedWriter(newOutputStreamWriter(socket.gctOutputStream()));he1o(server,in,out);//HELO命令§authLogin(message.in,out);//AUTHLOGIN命令◎mailfrom(message.ge(From(),in.oul);//MAILFROMrept(message.getTo(),in,out);//RCPT3data(message.getDatafrom(),message.gelDatato(),message.getSubject(),message.getContent(),in,out);//DATAquit(in,out);//QUIT3}catch(Exceptione){e.printStackTrace();returnfaIse;returntrue;。程序实现与服务器之间建立连接,根据服务器端发送的响应来完毕建立连接的过程,然后根据服务器发送回的响应信息,根据相应的模式,发送相应的信息,从而建立起与邮件服务器端的连接以发送邮件。3实验软硬件环境Es1ipseWINDOWSxp4实验环节(1)创建和解析内容::Message类是创建和解析邮件核心API,它的实例对象代表一封邮件。。(2)发送邮件:Transport类是发送邮件的核心API,它的实例对象实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。(3)接受邮件的:St。re类是接受邮件的核心API,它的是实例实现了邮件接受协议的邮件接受对象,例如POP3协议。5实验心得通过本次实验我加深对网络通信协议、网络编程接口等基本概念、基本原理的理解,大体了解了各种应用各种网络通信协议和网络编程接口编写网络应用程序的方法,拓宽了知识领域,锻炼了实践技能。比如邮件服务器按通讯协议可以划分为两种类型:STMP服务器。是SimpleMailTransferProtcol的简写,用于替用户发送邮件和接受外面发送给本地用户的邮件。是遵循SMTP协议的发送邮件服务器,,基于TCP服务的应用层协议。POP3服务器。是PostOfficeProtoco1的简写,用于替用户帮助用户读取SMTP服务器接受进来的该用户的邮件。它定义了邮件客户端软件与POP3服务器的通讯规则。不同的邮箱也许相应不同的服务器,应当选择不同的协议,否则会报错。6参考文献:1计算机网络:自顶向下方法(原书第4版)/(美)库罗斯(Kurose,J.F.)等著;陈鸣译-一北京:机械工业出版社,2023.122java从入门到精通:李钟尉,马文强,陈丹丹等编著;--清华大学出版社,2023.93实验指导书。。。Fi1efile=newFi1e(filename);。。。讦(file.exists()){//若文献存在,则将文献送给Web浏览器。。System.out.println(filename+"requested.");°。。*outstream.println('*HTTP/1.0200OK");。。。outstream.printIn("MIME_version:1.0"。。。outstream.print1n("Content_Type:text/htm1");。3ooointlen=(int)file.length();。«outstream.printin("Content_Length:"+1en);©oo®outstream.println("");°°°°°°sendfile(outsiream,file);//发送文献0。。outstream.flush();。o}else{II文献不存在时。Stringnotfound="<htm1><headxtitle>NotFound</title></headxbody><hl>Error404-filenotfound</hl></body></html>";。ooutstream.printin("HTTP/1.0404nofound");ooutstream.println("Content_Type:text/html");。oooutstrearn.println("Content_Length:"+notfound.length()+2);outstream,println("");。。。®outstream.println(notfound);。outstream.flush();TOC\o"1-5"\h\z0000}0000}…longml=l;。while(ml<11100000)6{o0ml++;。。}〃延时。client.close();000}catch(lOExceptione){0。System.out.print1n("Exception:"+e);0)}/*获取请求类型是否为“get”*/boo1eangetrequest(Strings){if(s.length()>0){。if(s.substring(0,3).equaIslgnoreCase("GET"))returntrue;returnfalse;/*获取要访问的文献名*/Stringgetfilename(Strings){0。Stringf=s.substring(s.indexOf('')+1);。f=f.substring(0?f.indexOf(''));°try{if(f.charAt(0)=='/')。。f=f.substring(l);。}catch(StringIndexOutOfBoundsExceptione){System.out.println("Exception:"+e);)0if(f.equals(""))f="index.html";。returnf;)/火把指定文献发送给Web浏览器*/voidsendfile(PrintStreamouts.Filefile){try(。。DatalnputStreamin=newDatalnputStream(newFileinputStneam(fi1e));。int1en=(int)fi1e.length();osbytebuf[]=newbyte[1en];。in.readFul1y(buf);outs,write(bu千,0,len);outs.flush();。3in.close();。}catch(Exceptione){o。0System.out.println("Errorretrievingfile.")。System.exit(1);0°})}pub1icclasswebsever{◎publicstaticvoidmain(String[]args){。//TODOAuto—generatedmethodstubinti=l,P0RT=8081;ServerSocketserver=nul1;。Socketdient=nul1;。。try(。。server=newServerSocket(PORT);。«System.out.print1n("WebServerislisteningonport"+

温馨提示

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

评论

0/150

提交评论