先说BUG出现在哪里
最近在做计算机网络的结课设计,选题是一个简易的Web Server
,我选择用Java
实现。
运行之后,访问Server的主页,页面正常返回,但是会在console上输出一个奇异的null
!?
很明显有线程没有正确的运行完所有代码,中途遇到差错没有完成HTTP的这次通信
。
如果是小规模的并发,在个人电脑上运行也不会有很大影响,页面也正常运行了。
不过如果是大规模的并发,这可能会造成效率的低下,所以我们在并发编程的时候要注意每一个细节
,因为项目上线运行,细节一旦放大,可能会带来很多麻烦。
源码贴上
package httpServer;
import java.io.*;
import java.net.Socket;
/*
1. @author Xianjiaming
2. @StudentID 2017141491010
3. @version v20191123
4. */
public class communicateThread extends Thread {
private Socket client; //客户端的套接字
//构造函数
communicateThread(Socket s){
client = s;
}
//获取请求URL
private String getResourcePath(String s){
//结合HTTP请求报文来看,第一行为请求方法+请求URL+HTTP协议版本(以空格分隔),故第一行第二个位置为请求URL
String str = s.split(" ")[1].substring(1);
//默认加载主页
if(str.equals("")){
str = "index.html";
}
return str;
}
//把请求的文件写进输出流
private void sendFile(PrintStream out, File file){
try{
DataInputStream in = new DataInputStream(new FileInputStream(file));
int len = (int)file.length();
byte buf[] = new byte[len];
//把文件写到buf缓冲区里
in.readFully(buf);
in.close();
//把buf写到out输出流里
out.write(buf,0,len);
//冲刷并关闭输出流
out