Java搭建Web服务器之Socket编程,理解 Apache、Tomcat
outputStream.write(buffer, 0, len); //很重要!通过socket的outputStream把咱们解析出来的文件内容一字不落的发出去 如果没写这个,导致你爱的跟你表白的抑郁而死,活该你单身 } outputStream.flush(); //如果最后一次write时没有把buffer写满,是不会自动发出去的,需要调用flush方法强制把内容从缓冲区发出去 好了,文件读取出来了,也返回给客户端了,亲爱哒他能收到吗?还是一样,务必先运行服务器端程序,然后打开浏览器输入127.0.0.1/index.html 后回车。我紧张,我激动,能不能收到回复,会给我什么样的回复?如图。。。 为什么会这样???!!! 好吧,看看女神的index.html文件里都写了些什么。。。 <html> <head> <meta charset="utf-8" /> <title>Welcome</title> </head> <body> <h1>王欢,你是个好人... </h1> </body> </html> 看到这里,我到底应该高兴还是欲绝。。。高兴的是,我女神给我答复了;欲绝的是。。。那么问题来了,,,学表白技术哪家强? 玩笑归玩笑,那我们的针对这次的浅谈题目是不是就完成了?可以说是的,但是我表白一次失败就算了?我还要表白第二次!(其实我倒不是这样的,这里只能牺牲我的人品来为了大家更好的理解了,呵呵)。好吧,我刚才的工作目录下还有个another.html,这次我来跟她表白吧!好!继续在浏览器中输入127.0.0.1/another.html后回车,期待这次会表白成功。可是我等啊等,浏览器在那里打圈圈,难道浏览器都知道我太花心了,拒绝帮我传递情书?好吧,我再打开浏览器试一下,输入127.0.0.1/index.html ,嗯?连第一个女神都不理我了?!我靠!为毛! 冲动是魔鬼!冷静!我打开eclipse控制台,发现服务器根本就没有“正在等待情书中…”,所以我拜托浏览器发过去的情书当然就发丢了,因为根本没人在接收啊。(窃喜,还好不是因为我太花心了所以浏览器没有帮我投递情书)可是为什么呢? 冷静吧,分析代码。其实我们可以想到,这段代码执行完一次后不就结束了吗,那我第二次给她发请求她当然会收不到了。对啊,那为了解决这个问题,怎么办呢?跪求红娘支招! 红娘说:“给服务器程序个死循环吧,让她反复在等客户端的请求就好了。”(其实红娘就一直在死循环中) 红娘果然是红娘(不然是谁。。。),那就按照她的说法试一试呗!改代码,加入 while (true) 死循环: public class MultiWebServer {
public static void main(String[] args) {
String base_url = "E://课件/计算机网络原理/实验/实验1/";
while (true) { try { ServerSocket serverSocket = new ServerSocket(80); System.out.println("正在等待情书中..."); Socket socket = serverSocket.accept(); System.out.println("收到情书,我要开始解析!"); InputStream inputStream = socket.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(inputStream)); String line = reader.readLine(); System.out.println(line); String url = line.substring(5, line.indexOf("HTTP") - 1);
System.out.println("情书解析完毕,我要想想怎么回复了...");
// 获取文件内容 inputStream = new FileInputStream(base_url + url); OutputStream outputStream = socket.getOutputStream(); byte[] buffer = new byte[4 * 1024]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } outputStream.flush();
System.out.println("情书请求已发送给客户端");
//关闭对应的资源 serverSocket.close(); socket.shutdownInput(); socket.close(); inputStream.close(); reader.close(); outputStream.close(); } catch (Exception e) { } } } } 这样,这位红娘就在这里一直等啊等,来了一个客户端我就处理他的情书请求,处理完这个继续循环以相同的方式等,处理,等,处理。。。。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |