欢迎来到天天文库
浏览记录
ID:46004660
大小:76.00 KB
页数:4页
时间:2019-11-20
《网络实习指导》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、NIOhttp服务器网络实习指导编写人:中国石油大学(北京)石悟松nio的好处:之前学习尝试的http服务器都是来一个socket请求开辟一个线程去处理它,自己开辟一个线程,操作系统底层有一个线程,所以来了n个请求需要开辟2n个线程才能处理为非阻塞式http服务器。而nio只需要一个轮询线程就能处理为为阻塞式,只需要n+l个线程,避免了大量的线程上下文之I'可的切换导致的资源消耗。本文说明:1•本文内容很浅,只给出一个基本的不够完善的指导,勿喷2.本文的代码是在word里面敲的,若有拼写错误,自行改正1・分析题目题目要求用ni。实现一个http服务器,所以涉及到nio框架、文件读写、报文
2、解析、内存管理这儿个模块。http绑定一个端口,比如8086,那么游览器访问227.0.0.1:8086/ndex.html后,游览器会发送一个报文(见get报文.txt),然后服务器(你写的http服务器会接收到这个报文),接着解析报文取出url(这里面就是第一行中间那个字符串,/index.html)o解析完后,假设你设置的web目录是f:web.那么就读文件f:web/index.html,把里面的内容返回给nio框架回发过去。如果是post报文(见post报文.txt),那么除了解析url,还要解析下面所有的键对值,这里的post报文.txt键对就是{id:swspwd:123f
3、ilename:l.txt}(file内容是123456789.。。。。。)2•程序架构1・编码转换类,完成两个功能,byte[卜〉string和string->byte[](在这里统一使用iso-8859-l国际编码格式,单字节编码,具体转换自行百度,然后填写以下函数)ClasscharsetClass{〃把bytes转化为string,用iso-8859-l编码publicstaticstring(byte[]bytes){//yourcodes}〃把str转化为byte[],用iso-8859-1编码Publicstaticbyte[](stringstr){//yourcodes
4、2•文件读写类,完成两个功能,读文件和写文件ClassfilerwClass{//读文件filename,返回文件内容(string)Publicstaticstringfileread(stringfilename){//yourcodes}〃写文件filename,把value写到文件里面去。(你需要考虑文件是否存在。)Publicstaticvoidfilewrite(stringfilename,stringvalue){//yourcodes}}3•报文解析类,需要完成解析过程Classresolver{PublicStringurl;PublicStringmethod;〃是
5、get还是postPrivateStringstr;//完整的报文Privatemapmap;//存放post键对白勺map〃构造窗数,需耍在这里面解析出url,method,post键对内容Publicresolver(Stringmsg){This.str=msg;//yourcodes,resolvethestr.}〃获取map键值,如果没有返回nullPublicStringgetValue(Stringkeyname){lf(this.map.containsKey(keyname)){Returnthis.map.get(keyn
6、ame);}Else{Returnnull;}}〃响应报文PublicstaticStringresponsehead(){//yourcodes}}注意:这里用到了map的三个函数。Map.putMap.getMap.containskey报文解析可能会用到以下函数StringstrStr.splitStr.indexof(stringstring)Str.indexof(stringstringjntindex)Str.substring4•内存管理类,完成第二次读是从内存读,不是读文件ioClassmemoryClass{Privateintmaxnum=200;//允许的最大ma
7、p键对数Privateintcurnum=0;//当前map键对数Privatemapmap;PublicmemoryClass(){Map=newHashmap();}Publicintcanputnum(){Returnmaxnum-curnum;}Publicvoidput(Stringkeyname,Stringval
此文档下载收益归作者所有