2023年计算机网络原理实验报告.pdf

上传人:奔*** 文档编号:93809469 上传时间:2023-07-13 格式:PDF 页数:22 大小:1.61MB
返回 下载 相关 举报
2023年计算机网络原理实验报告.pdf_第1页
第1页 / 共22页
2023年计算机网络原理实验报告.pdf_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《2023年计算机网络原理实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年计算机网络原理实验报告.pdf(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、多线程Web服务器i实验目的:用JAVA语言开发一个多线程的WEB服务器,它能并行服务于多个请求。发送网页文献,让网页文献可以通过在U R L中制定端标语来被浏览器使用。2实验代码及截图 I 巨 http:/localhost:8081/index.htm收藏夹 8 笆 6.11 目 6,9 笆 http www.baidu 1 首页四 http:/localhost:8081/index.htm145646-456 收藏夹 W 电6.11钝6.9*http-www.baidu,首页J原交通大学g 卷Internet Explorer无法显示该网页Internet Explorer无法显示该网

2、页您可以尝试以下操作:更多信息class C on n ection T h re a d e x ten d s Thread Socket c 1 ie n t;i n t cou n te r;o pub 1 ic Con n e c t i on T hr e ad(S o cket c l,i n t c)。d ie n t=c l;,c o unt e r=c;b b opublic v o id ru n()/线程体。t r y o b。St r i n g de s tlP=c lie n t.ge t Ine t Addre s s().to S trin g();/客户机I

3、P地址。in t d e stp o r t=c 1 i e nt.g e t P o r t();/客户机端标语。Syst e m.o ut.pr i n tln(Conn e c t ion+co u nter+:c o nne c ted t o+destIP+on p or t +des t port+.);o o P rin tS tr e am out s tream=n ew P rin tS tr e am(c 1 i en t.get0 u tputS t r eam();。Da t aln p u tS tr e am in s tream=new Dat aInpu t

4、S tream(cli ent.ge t I n putS tream();。o S tr i n g in 1 ine=in s tream.r,ead L.i ne();/读取Web浏览器提交的请求信息。System.ou t.p r in t 1 n(Re c e i v e d:+i n lin e);0 00 0o o i f (g e t re q ues t(i n lin e)(/假如是GET请求 S t r i ng f ilenam e=g e t f ile n a me(in 1 in e);,6 o F i 1 e f i l e =new F i 1 e(f il

5、e name);。if(f i le.e x is ts()/若文献存在,则将文献送给W e b浏览器o o System.out.p rin tln(file n a m e+r e q u e sted.);o o o ou t stream .p ri n t l n(HTT P/1 .0 2 00 OK);。o o u ts tr e a m.pr i n t In(M lM E _ v e rs io n:l.0 );o 。outs t ream,pr i n t 1 n(Cont e n t _ Type:te x t/h tm1 );o o o o i n t len=(i n

6、t)f ile.le n g th();。outs t ream.p rin tin (C o n ten t _ L e n g t h:+1 e n);o oooo o u ts tr e am.p r in tln ();o o o o s e n d file(o u t s t re a m,file);/发送文献so o out s tre am.f lu s h();。e l s e /文献不存在时s o St r ing notfou n d=N o tFou n d E rro r 404-f ile notfou nd ;。o o u t s tream.p r i n t

7、in (HTTP/1.0 40 4 n o f o und);。o u ts t r e am.pr i n tln(C o n t e nt_Typ e:t e x t/h tm l);。o u t st r e a m.p rin tln(Con t e nt_Length:+notfoun d.le n g th()+2);d o o oo u t s t ream,p r in t ln();。3 b o o u t s t r earn,pr in t i n(n o tfo u n d);outstream.flush();O d O 0 0b b bo o o long m l=

8、l;o w h ile (ml0)。i f (s.su b s trin g(0,3).eq u a Islg n o r e Ca s e(G E T)r e t u rn tr u e;re tu r n f a ls e;)/*获取要访问的文献名*/S trin g g e tfilenam e(S trin g s)0。S tring f=s.subs t r i ng(s.i n d exOf()+1 );。f=f.s u b s t r in g(0 jf.in d exO f();6 t r y (di f(f.c ha r A t(0)=/)o o f=f.subs t r i

9、n g(l);。c a tch(S tr in g I n d e x OutOfBou n dsE x ception e)Sy s tem.ou t.p r i n tln(E x c e p t i on:+e);)i f (f.e qual s()f=in dex.htm l ;re t u r n f;)/*把指定文献发送给Web浏 览 器*/v o id sen d file(P rin t S t ream outs,F ile f i le)t r y 。Datal n putStream in =new D atalnputS t ream(n e w F ile in p

10、u tS t r e am(fi 1 e);i n t 1 e n=(i n t)f i 1 e.le n g th();o b y te b u f=n e w b yt e 1 e n;。i n.readFul 1 y(b u f);outs,w rite(b u f,0,le n);o u ts.f 1 u s h();。i n.close();o c a t c h(Ex c eption e)bbo Sys t em.out.p r in tl n(Er r or re tr i e v in g f i le.);。System.exi t(1 );0 )p u b 1 i c c

11、 lass webseve r o pu bli c s t at i c vo i d mai n(S t rin g args),I I TODO Auto g e nera t ed meth o d stubi nt i=l,PORT=8 0 8 1 ;Server S o c k e t s er v er=n ul 1 ;。S o cket d ie n t=nul 1 ;os try 0 0server=new S e rv e r S o cket(PORT);。o Sy s tem.ou t.p ri n t 1 n(Web S e rver i s lis t e n i

12、n g onport+s e rve r.ge t Lo c alPor t();0 0。whi 1 e(t r u e)0 0。c l i e nt=se r ve r.a c c e p t();/接受客户机的连接请求。new C on n ectionTh r e a d(c 1 i e n t,i).s ta rt。;。o i+;b c atch(Ex c eption e)。S yste m.o u t.prin t 1 n(e);)3实验软硬件环境e e l i p s eWin d o ws xpI E浏览器4实验环节(1)连接:Web浏览器与Web服务器建立连接,打开一个称为s

13、ocket(套接字)的虚拟文献,此文献的建立标志着连接建立成功。(2)请求:Web浏览器通过sock e t 向 W e b 服务器提交请求。HTTP的请求一般是GET或 P 0 S T 命令(POST用于FORM参数的传递)。G E T 命令的格式为:GE T 途径/文献名H T T P/1.1文献名指出所访问的文献,HTTP/1.1指出W e b 浏览器使用的HTTP版本。(3)应答:Web浏览器提交请求后,通过HTTP协议传送给We b 服务器。Web服务器接到后,进行事务解决,解决结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。为 了 告 知 Web浏览器

14、传送内容的类型,Web服务器一方面传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTT P 体信息之间用一个空行分开。(4)关闭连接:当应答结束后,Web浏览器与W eb服务器必须断开,以保证其它Web浏览器可以与Web服务器建立连接。5实验心得Ja v a 中实现多线程有两种途径:继承Th r e a d 类或者实现Runn a b le 接口。此处使用了接口的方式生成线程,由于接口可以实现多继承,况且Runnable只有一个ru n 方法,很适合继承。在使用Th r e a d 的时候只需继承T hread,并且new一个实例出来,调 用 s t a r t

15、()方法即可以启动一个线程。在本次实验中,通过用j a v a 语言开发一个多线程的web服务器,能并行服务于多个请求,来掌握套接字编程技术,了解并运用h t t p 协议的作用原理,实现多线程w eb服务器设计。6参考文献:,1计算机网络:自顶向下方法(原书第4版)/(美)库罗斯(Kurose,J.F.)等著;陈鸣译一北京:机械工业出版社,2 023.122java从入门到精通:李钟尉,马文强,陈丹丹 等编著;一 清华大学出版社,202 3.93实验指导书邮件客户机1实验目的:。为发送者提供一个图形界面,其中包含:发送电子邮件地址、接受者电子邮件地址、邮件主题和自身。开发一个In tern

16、e t上的使用S T M P协议的网络服务器的邮件客户端,在Wi n d o w s X P,W indow s7系统下,使用J AVA语言开发,并最终运营该程序。2实验部分代码及截图:在发件人框中填写相应的信息,点击发送按钮即可向目的邮箱发送邮件。 X作 业2:邮件客户机1025671623你0 !这是T询 试 斜*删除解件4 1/5 提示I区信息已成功发送!确定publ i c class Ma i IMes s a g e publ i c s t a t ic v oid m a in (S tr i ng args)。E v e ntQueu e.invokeLa t er(n e

17、w Run n ab le()pu b li c v oi d r un()tr y(。Send F rame frame=new SendFrame();Mfr a me.s e tVis i b 1 e(true);e。catch(Exc e ption e)。g e.printS t ackTra c e();/*。*Create th e f r ame.0 */pub 1 ic Se n d Frame()e t h i s Fram e=t h is;gse t T i tl e(n Ja v a M a il c lie n t );s etDefault C 1 o seOpe

18、r a t i o n(JF r a m e ,EXI T _ON_CLOSE);setB o un d s(100,100,4 5 0,328);c on t e n t Pane=new J Pane 1 ();“c o n te ntP a ne.s e tBo r der(n e w Emp t y Border(5,5,5,5);setCo n te n t P a n e(c o n t ent P ane);con t en t Pane.setL a y out(n ull);。J L abel IblFrom=new JLabel(ufrom:*);oolblFrom.s e

19、 tBounds(1 0,1 0,54,22);c o nt e ntPan e.add(lblF r om);0gJLab e 1 IblTo=new JLabel(n T o:);o 1 bl T o.setB o u n d s(l 0,4 2,4 2,22);con t entP a ne.add(I b lT o);s J Labe 1 lb 1 Subject=n e w J Lab e 1 (H S ub j ec t:);4 b IS u bjec t.s etB o und s(1 0,74,54,2 2);oocontentP a n e.a dd(lblS u b j e

20、ct);bt xt_ F r om=new J TextField();8tx t _Fr o m.se t E d i t abl e(f a 1 s e);F ro m.setText(,H,);txt_From.setB o u nd s(49,11,38 3,21);content P ane.add(txt_F r o m);。tx t _From.s etC olum n s(1 0);“xt_To=n e w JTex t F i e ld();t xt_To.s e t T ex t(n);o tx t _To.s e tColumn s(1 0);。t xt_To.s e t

21、 Bounds(4 9,4 2,383,21);c o nten t Pane,a dd(t x t _To);g t e xt_Subject=new JT e xtFie 1 d();o t e xt_Subj e ct.setText(作业 2:邮件客户机)4 e x t _Sub j ect.setColumns(1 0);text_ Subj e ct.se t Bou n ds(66,73,3 66,21);contentPa n e.a dd(tex t _S ubject);0。J L abel IblMassage=new JL a bel(n M a s s age:1);

22、lblMass a ge.setBo u nd s(10,1 01,6 4,15);contentP a ne.a d d(IblMass a g e);0000gj B utton btnQu i t=new JBu t t on(Q u it);ab t nQuit.a d d Act i o nL i st e n e r(new Ac t io n Lis t ener()叩 u b lie vo i d actio n Perfo r med(A ct i on E vent e)。4hisF r ame.d i spo s e();00 0);btnQ u i t.s e tBou

23、nds(2 9 5,271,137,23);con t en t Pane.add(btnQuit);0。JScr o 1 1 Pa n e s c r o ll P ane=new JScr o 1 1 Pane();s crollPane.s e tB o u n ds(1 0,229,4 2 2,-1 0 1);contentPa n e.add(s c r o UPa n e);。P a ne 1 pane 1 =n ew Pa n el();。pa n el.s e t Bound s(10,1 1 5,4 22,156);c o n t entPane.ad d(p a n e 1

24、 );p a n e 1 .s etLay o ut(n ull);00dS c r ollPane s c ro 1 1 P a n e_ 1 =new S c r ollP a n e();。scroll P a n e _ 1.s etBounds(0,0,422,156);e p a nel.add(sc r o 1 IPa n e_ 1);i n a 1 T ext A r eaS en d_ Tex t Area=new TextArea();gSen d_Tex t Ar e a.s e tText(你好!这是一封测试邮件”);。S end_T ext Area.setBo u

25、n d s(0,0,4 40,1 7 0);s c r o HP a ne_l.a dd(S end_Tex t A rea);J B utton b tnS e nd=n e w JButton(Sen d n);btnSe n d.add Ac t i o nL istener(n ew ActionList e ner()。p u b 1 i c vo i d ac t io n Perfo r m e d(Act i on E vent e)。oStri n g txt f rom=txt_From.getText();。o S t r i ng t x tto=txt_To.g et

26、Tex t();“Str i n g txtsubje c t=text_Subject.getText();g S tring sendte x ta r ea=Send_TextArea.g e tText();0008 try g Ma i IM e ssa g e mes s age=new Ma i 1 Message();0000m e ss age.setFrom(txt f rom);/发件人o o o m e ss a ge.setTo(txtto);/收件人a。S t r ing se r ver=”;/邮件服务器 s m t p.q q.c o mo g messa g

27、e.setSubject(txtsub j ect);邮件主题的 m e ss a ge.setConte n t(s en d te x ta r ea);邮件内容。messa g e.s e tDatafr o m(t x tf r o m);发件人,在邮件的发件人栏目中显示。go messa g e.setDat a t o(t xtto);收件人,在邮件的收件人栏目中显示。m e ssage.setUse r(”);登陆邮箱的用户名me s sage,s e t P a ssw o r d(”zjr*(保密);登陆邮箱的密码0 0。S endFrame smtp=n e w Se n

28、dF r ame(server,25);。boolea n flag;08f 1 a g=smtp.s e n dMail(mess a ge,ser v er);000。8 if(fl a g)a J 0 ptionPa n e.sh o w M essag e D ialo g(nu 1 1,信息已成功发送!二提醒:JO P t ionP a n e.IN F 0 RM A T10 N_M E SSAGE);000 b。el s e。JOption P a n e.s h owMe s sageDia 1 o g(nu 1 1,邮件发送失败!”,提醒*JO ption Pane.I NFO

29、R MAT I ON_MESS A GE);0)g/S y st e m.o u t.p r i ntln(iu h f ihula e ih b a );g 3 cat ch(UnknownHos t Ex c eption el)0gg TODO Auto-g e n e r ated c atch blockg e 1 .pr i ntStac k Tra c e();o。c a tc h(IO E xception e l)g 。/TOD 0 A ut o g e n era t e d ca t ch bio c k。1.printStackTr a c e();/A oJO p t

30、ionPane.s howM e ssageDialog(null,”信息已成功发送!“提醒”,J O ptionPan e.INF 0 RMATION_MESSAGE);/A eSy s t em.out.p r in t 1 n(t x t from+”n+t xtto+”n+t x t s u bject+*n+sendte x tar e a);00 j06);。由 t nSend.s e tB o un d s(10,271,144,23);oconten t P ane.a d d(btnSend);。J Butto n btn C 1 ea r=n e w JBu t t o n

31、(Clear );btnClear.ad d Actio n Lis t en e r(n e w Ac t ionListene r()。pu b lie v oi d ac t io n Perf o rm e d(A c tio n Event e)。t x t _To.setText(u);t e xt_ Su b j e ct.setT e xt();g S end_T e xtAr e a.setText();。oJOption P ane.sho w MessageDi a lo g(n u ll,”信 息 删 除 成 功 匕“提 醒”,J0 p tio n P a ne.INF

32、ORMATION_MES S AGE);0 0|。);b t nCle a r.s e tBou n ds(149,271,1 50,23);c on t entPane.ad d(b t nC lear);pr i vate b oolean debug=true;3 BASE64Encode r e n co d e=new B ASE64 E n code r();用于力口密后发送用户名和密码o p rivate Socket s o eke t;p u blic Sen d Fram e(S tring ser v e r,int p o r t)t h rows Unkno w n

33、H ostE x cept ion,lOExc e pt i on。try(。s o ck e t=new Soc k e t(serv e r,25);o cat c h(S o c ketE xception e)/System,o ut.pri n t 1 n(e.getM e ssag e();o c a tch(E x ce p t i on e)e.pr i n t S t a c kTrace();finally/Sy s tem.out.p r 已经建立连接!)0 。/注册到邮件服务器。public vo i d helo(S t r i ng serve r,B u ffer

34、ed R e a d e r i n,B u ff e r edWriter o ut)throws IO E xcep t ion。int resu 1 t:o re s u lt=getRes u lt(in);。/连接上邮件服务后,服务器给出2 2 0 应答i f(result!=22 0)t h row n ew 10 E x ception(连接服务器失败”);0)。r es u lt=s endServer(HELO H+serv e r,in,o u t);。/HELO命令成功后返回2 5 0。if(result!=2 50)0 o throw n ew IO E x c ept

35、ion(注册邮件服务器失败!);。private i nt s e ndServ e r(S tr i n g str,B uf f e r e d Reader i n,B u f f e r e d Wri ter out)th r ow s I 0 Ex c e p tio n ou t,wr i te(str);。o ut.newLine();。out.flushO;o i f(debug)。Sy s tem.ou t.println(M 已发送命令:+s tr);)ret u r n ge t Resu lt(in);public int ge t R e suit(Buffered

36、Re a d e r i n)o S t r in g 1 ine=n;try(line=in.readLi n e();i f(deb u g)/System.out.p rintl n(M 服务器返回状态:+line);0 catch(E x c eption e)o e.p r i nt S ta c kTr a c e();。/从服务器返回消息中读出状态码,将其转换成整数返回o S t ri n g T o k e n i zer s t=new S t ri n gTok e ni z er(1 i ne,);o retu r n i n t e g e r.p arsel n t(

37、st.nextT o k e n();)0。p ubli c vo i d au t h Lo g in(M a ilMes s ag e m e ssa g e,Buffo r edRea d er in,B uff ere d Writ e r o ut)throws I OE x c e pti o nint resul t;。re s u 1 t=sendServer(AUTH LOGIN,i n,o u t);if(res u 1 t!=334)thr o w new IO E xce p t i o n(用户验证失败!);。re s u lt=s e n dSe r ver(e n

38、 c o de.encode(message.g e tUser().get B yt e s(),i n,out);。i f(r e s ul t!=33 4)o th ro wnew I 0 Exc 叩 ti o n(用户名错误!”);)res u It=se n d S e rver(en c od e.encode(m e ss a g e.ge t P assword().getBytes(),in,out);i f(re s u lt!=2 3 5)。th r o w new lOEx c 叩ti o n(M 验证失败!”);)/开始发送消息,邮件源地址p ublic v o id

39、 m a i 1 f r o m(S tri n g sour c e,Bu f fered R eader in,B u ff e redW r ite r o u t)t hrows 10 Excepti o n。in t res u It;r e sult=sendSer v er(nM A IL FROM:,i n,out);i f(re s ult!=250)。throw new lOExc e ption(指定源地址错误”);0 0 。/设立邮件收件人p u blic void r c pt(Strin g to u chman,B u f f eredR e ade r in,B

40、 u fferedWr i t er out)throws I OExc e p t ion。i nt re s u 1 t;。r e sul t=s endS e r v er(nRC P T T O:n,in,o u t);i f(r e sul t!=25 0)th ro w new lOEx c ep t ion(指定目的地址错误!M);邮件体退出pu b lie voi d q u i t(B u ffe r e d Reader in,B u fferedW r i t er o u t)th r ows I OE x c e p tio n。i nt result;re s ul

41、t=sen d S e r v er(Q UIT,i n,o u t);)0发送邮件主程序p u b 1 ic boo 1 ean s e ndMa i l(MailMessage messag e,String server)。t ry(。Buffe r edR e ad e r in=new B u f feredReader(n ew I n p u t StreamRea d er(s ocket.ge t i n put S tre a m();。B u fferedWr i ter o u t=new Bu f fere d W r ite r(new O ut put S tr

42、e amWriter(soc ke t.ge t Outpu t S tream();h e 1 o(s erver,i n,out);/H E LO 命令o a uthLogin(me s sag e,in,o u t);/AUTH LOGIN命令。mailfr o m(mess a ge.g etF r om(),i n,o ut);/MAIL F ROMre p t(m e ssage.g e tTo(),in,out);/RC PT。data(messag e.g etDataf r om(),mes s a g e .getData t o(),message,g etSubje c

43、 t(),mes s a g e.g etC o n ten t(),in,o u t);/D A TAqu i t(in,ou t);/QUIT。c a tch(Exc e ptio n e)e.pr i ntS t a c kTrace();r etu r n f a I s e;r e tu r n t r ue;0。程序实现与服务器之间建立连接,根据服务器端发送的响应来完毕建立连接的过程,然后根据服务器发送回的响应信息,根据相应的模式,发送相应的信息,从而建立起与邮件服务器端的连接以发送邮件。3 实验软硬件环境E s 1 i p seW I NDOWS xp4 实验环节(1)创建和解析

44、内容:M e s s a g e类是创建和解析邮件核心A P I,它的实例对象代表一封邮件。(2)发送邮件:T r an s port类是发送邮件的核心A P I,它的实例对象实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。(3)接受邮件的:S t o r e类是接受邮件的核心A P I,它的是实例实现了邮件接受协议的邮件接受对象,例如P。P 3 协议。5 实验心得通过本次实验我加深对网络通信协议、网络编程接口等基本概念、基本原理的理解,大体了解了各种应用各种网络通信协议和网络编程接口编写网络应用程序的方法,拓宽了知识领域,锻炼了实践技能。比如邮件服务器按通讯协议可以划分为两种类型:1

45、.STMP服务器。是 Simple Ma i l Transfer Protcol的简写,用于替用户发送邮件和接受外面发送给本地用户的邮件。是遵循SM TP协议的发送邮件服务器,,基于T C P 服务的应用层协议。2.POP3服务器。是P ost O f fic e Protoc o 1 的简写,用于替用户帮助用户读取SMTP服务器接受进来的该用户的邮件。它定义了邮件客户端软件与POP3服务器的通讯规则。不同的邮箱也许相应不同的服务器,应当选择不同的协议,否则会报错。6 参 考 文 献:1计算机网络:自顶向下方法(原书第4 版)/(美)库罗斯(Ku rose,J.F.)等著;陈鸣译-一北京:机械工业出版社,2 0 23.1 22 java从入门到精通:李钟尉,马文强,陈丹丹 等编著;一清华大学出版社,202 3.93 实验指导书

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com