您的位置:首页 > 理论基础 > 计算机网络

最简单的Http服务器之java版

2004-08-16 13:28 543 查看
只支持单线程,只能接收一个请求

我想加以改进,让它可以接收多个请求

注释我就不加了

可以参考用winsock版,好像java的更简单

?

import java.io.*;
import java.net.*;
import java.util.*;

public class WebServer{
? public static void main(String []args)throws Exception{
??? String requestMessageLine;
??? String fileName;
??? ServerSocket listenSocket=new ServerSocket(80);
??? Socket connectSocket=listenSocket.accept();
??? BufferedReader inFormClient=new BufferedReader(new
??????? InputStreamReader(connectSocket.getInputStream()));
??? DataOutputStream outToClient=new
??????? DataOutputStream(connectSocket.getOutputStream());
??? requestMessageLine=inFormClient.readLine();
??? StringTokenizer tokenizedLine=new StringTokenizer(requestMessageLine);
??? if(tokenizedLine.nextToken().equals("GET")){
????? fileName=tokenizedLine.nextToken();
????? if(fileName.startsWith("/")==true){
??????? fileName=fileName.substring(1);
????? }
????? String filePath=new String("D://Java//httpserver//classes//");
????? File file=new File(filePath+ fileName);
????? int numOfBytes=(int)file.length();
????? FileInputStream inFile=new FileInputStream(filePath+fileName);
????? byte []fileInBytes=new byte[numOfBytes];
????? inFile.read(fileInBytes);
????? outToClient.writeBytes("HTTP/1.0 200 Document Follows/r/n");
????? if(fileName.endsWith(".jpg")){
???????? outToClient.writeBytes("Conten-Type: image/jpeg/r/n");
????? }
????? else if(fileName.endsWith(".gif")){
???????? outToClient.writeBytes("Conten-Type: image/gif/r/n");
????? }
????? outToClient.writeBytes("Content-Length: " + numOfBytes + "/r/n");
????? outToClient.writeBytes("/r/n");
????? outToClient.write(fileInBytes,0,numOfBytes);
????? connectSocket.close();

??? }
??? else{
????? System.out.println("No support for other request except GET!");
??? }

? }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: