科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道WebServer.java 用JAVA编写Web服务器

WebServer.java 用JAVA编写Web服务器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

WebServer.java 用JAVA编写Web服务器

作者:巧巧读书 来源:巧巧读书 2008年6月5日

关键字: 网吧 网吧组网 网吧服务器架设

  • 评论
  • 分享微博
  • 分享邮件

  //WebServer.java 用JAVA编写Web服务器

  import java.io.*;

  import java.net.*;

  public class WebServer

  {

  public static void main(String args[])

  {

  int i=1, PORT=8080;

  ServerSocket server=null;

  Socket client=null;

  try

  {

  server=new ServerSocket(PORT);

  System.out.println("Web Server is listening on port "+server.getLocalPort());

  for (;;)

  {

  client=server.accept(); //接受客户机的连接请求

  new ConnectionThread(client,i).start();

  i++;

  }

  }

  catch (Exception e) {System.out.println(e);}

  }

  }

  /* ConnnectionThread类完成与一个Web浏览器的通信 */

  class ConnectionThread extends Thread

  {

  Socket client; //连接Web浏览器的socket字

  int counter; //计数器

  public ConnectionThread(Socket cl,int c)

  {

  client=cl;

  counter=c;

  }

  public void run()  //线程体

  {

  try

  {

  String destIP=client.getInetAddress().toString(); //客户机IP地址

  int destport=client.getPort();          //客户机端口号

  System.out.println("Connection "+counter+":connected to "+destIP+" on port "+destport+".");

  PrintStream outstream=new PrintStream(client.getOutputStream());

  DataInputStream instream=new DataInputStream(client.getInputStream());

  String inline=instream.readLine(); //读取Web浏览器提交的请求信息

  System.out.println("Received:"+inline);

  if (getrequest(inline))

  {   //如果是GET请求

  String filename=getfilename(inline);

  File file=new File(filename);

  if (file.exists())

  { //若文件存在,则将文件送给Web浏览器

  System.out.println(filename+" requested.");

  outstream.println("HTTP/1.0 200 OK");

  outstream.println("MIME_version:1.0");

  outstream.println("Content_Type:text/html");

  int len=(int)file.length();

  outstream.println("Content_Length:"+len);

  outstream.println("");

  sendfile(outstream,file); //发送文件

  outstream.flush();

  }

  else

  { //文件不存在时

  String msg1="<html><head><title>Not Found</title></head><body><h1>Error 404-file not found</h1></body></html>";

  outstream.println("HTTP/1.0 404 no found");

  outstream.println("Content_Type:text/html");

  outstream.println("Content_Length:"+msg1.length()+2);

  outstream.println("");

  outstream.println(msg1);

  outstream.flush();

  }

  }

  //instream.close();

  //outstream.close();

  long m1=1;  //延时

  while (m1<11100000) {m1++;}

  client.close();

  }

  catch (IOException e)

  {

  System.out.println("Exception:"+e);

  }

  }

  /* 获取请求类型是否为“GET” */

  boolean getrequest(String s)

  {

  if (s.length()>0)

  {

  if (s.substring(0,3).equalsIgnoreCase("GET")) return true;

  }

  return false;

  }

  /* 获取要访问的文件名 */

  String getfilename(String s)

  {

  String f=s.substring(s.indexOf(' ')+1);

  f=f.substring(0,f.indexOf(' '));

  try

  {

  if (f.charAt(0)=='/')

  f=f.substring(1);

  }

  catch (StringIndexOutOfBoundsException e)

  {

  System.out.println("Exception:"+e);

  }

  if (f.equals("")) f="index.html";

  return f;

  }

  /*把指定文件发送给Web浏览器 */

  void sendfile(PrintStream outs,File file)

  {

  try

  {

  DataInputStream in=new DataInputStream(new FileInputStream(file));

  int len=(int)file.length();

  byte buf[]=new byte[len];

  in.readFully(buf);

  outs.write(buf,0,len);

  /*

  DataOutputStream ou=new DataOutputStream(System.out);

  ou.write(buf,0,len);

  */

  outs.flush();

  in.close();

  }

  catch (Exception e)

  {

  System.out.println("Error retrieving file.");

  System.exit(1);

  }

  }

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章