Java socket 访问网页

来源:互联网 发布:申请哥伦比亚大学知乎 编辑:程序博客网 时间:2024/05/16 09:32

 原来学过socket编程,因为最近我也在做自己的服务器,但是没有加任何安全机制,我就想到了这个服务器可以承受的最大并发量是多少,当然这是和服务器的内存有关的。

   如:www.lipyi.com这个网址,同一时间有千万的用户访问(也可能是同一用户),那么服务器是不是要崩掉了?这时候我考虑到很多网址后面都有时间戳,原来就是避免这个问题的。另外也看到有网友说的可以过滤掉同一IP,这也是一个不错的办法,但是感觉对于很多小型的网站来说,时间戳和过滤IP是没有做的。

  下面是我用Java写的访问CSDN中我的个人主页,当运行这个程序时,我的主页确实打不开了。累感不爱。

      

[java] view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.io.InputStreamReader;  
  5. import java.io.OutputStreamWriter;  
  6. import java.io.PrintWriter;  
  7. import java.net.InetAddress;  
  8. import java.net.Socket;  
  9.   
  10. public class TestServer  
  11.     {  
  12.         public final static String HOST = "blog.csdn.net";  
  13.         public final static String PATH = "/yilip";  
  14.         public final static int PORT = 80;  
  15.         public final static int PEOPLE_NUM = 10*10000;  
  16.         public static int num = 0;  
  17.   
  18.         /** 
  19.          * Author: Lip 
  20.          */  
  21.         public static void main(String[] args)  
  22.             {  
  23.                 for (int i = 0; i < PEOPLE_NUM; i++)  
  24.                     {  
  25.                         System.out.println("有多少人:" + num);  
  26.                         ClientThread thread = new ClientThread(false);  
  27.                         thread.start();  
  28.                     }  
  29.             }  
  30.   
  31.     }  
  32.   
  33. class ClientThread extends Thread  
  34.     {  
  35.         Socket socket = null;  
  36.         BufferedReader br = null;  
  37.         PrintWriter pw = null;  
  38.         boolean isout;//是否输出返回结果  
  39.   
  40.         public ClientThread(boolean isout)  
  41.             {  
  42.                 this.isout = isout;  
  43.             }  
  44.   
  45.         public void run()  
  46.             {  
  47.                   
  48.                 TestServer.num++;  
  49.                 try  
  50.                     {  
  51.                         this.sleep(10*1000);  
  52.                         socket = new Socket(  
  53.                                 InetAddress.getByName(TestServer.HOST),  
  54.                                 TestServer.PORT);  
  55.                         // 读取服务器数据  
  56.                          br = new BufferedReader(new  
  57.                          InputStreamReader(  
  58.                          socket.getInputStream(),"utf-8"));  
  59.                         pw = new PrintWriter((new OutputStreamWriter(  
  60.                                 socket.getOutputStream())));  
  61.                         StringBuffer requestHeader = new StringBuffer();  
  62.                         requestHeader  
  63.                                 .append("GET " + TestServer.PATH  
  64.                                         + " HTTP/1.1\n")  
  65.                                 .append("HOST:" + TestServer.HOST + "\n")  
  66.                                 .append("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n")  
  67.                                 .append("Accept-Encoding:gzip, deflate, sdch\n")  
  68.                                 .append("Accept-Language:zh-CN,zh;q=0.8\n")  
  69.                                 .append("Cache-Control:no-cache\n")  
  70.                                 .append("User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36\n")  
  71.                                 .append("Encoding:UTF-8\n")  
  72.                                 .append("Connection:keep-alive" + "\n")  
  73.                                 .append("\n");  
  74.   
  75.                         if (isout)  
  76.                             System.out.println(requestHeader.toString());  
  77.                         pw.println(requestHeader);//  
  78.                         pw.flush();  
  79.                         String line = "";  
  80.                         if(isout)  
  81.                          while((line=br.readLine())!=null)  
  82.                          {  
  83.                            System.out.println(line);  
  84.                          }  
  85.                         System.out.println("Get the data from csdn......");  
  86.   
  87.                     } catch (Exception e)  
  88.                     {  
  89.                         e.printStackTrace();  
  90.                     } finally  
  91.                     {  
  92.                         try  
  93.                             {  
  94.   
  95.                                 System.out.println("close......");  
  96.                                 // br.close();  
  97.                                 pw.close();  
  98.                                 socket.close();  
  99.                             } catch (IOException e)  
  100.                             {  
  101.                                 e.printStackTrace();  
  102.                             }  
  103.                     }  
  104.             }  
  105.     }  
  遇到的一个问题,就是返回结果总是乱码,我在这里
[java] view plain copy
  1. br = new BufferedReader(new  
  2. InputStreamReader(  
  3. socket.getInputStream(),"utf-8"))  
  4. 码都还是乱码,但是我查看浏览器中编码是UTF-8,不知道这是为什么?  
[java] view plain copy
  1.   
[java] view plain copy
  1. 没事运行这个程序,给别的网站搞点压力,还是不错滴。。。。  
原创粉丝点击