Java socket 访问网页

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

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

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class TestServer
	{
		public final static String HOST = "blog.csdn.net";
		public final static String PATH = "/yilip";
		public final static int PORT = 80;
		public final static int PEOPLE_NUM = 10*10000;
		public static int num = 0;

		/**
		 * Author: Lip
		 */
		public static void main(String[] args)
			{
				for (int i = 0; i < PEOPLE_NUM; i++)
					{
						System.out.println("有多少人:" + num);
						ClientThread thread = new ClientThread(false);
						thread.start();
					}
			}

	}

class ClientThread extends Thread
	{
		Socket socket = null;
		BufferedReader br = null;
		PrintWriter pw = null;
		boolean isout;//是否输出返回结果

		public ClientThread(boolean isout)
			{
				this.isout = isout;
			}

		public void run()
			{

				TestServer.num++;
				try
					{
						this.sleep(10*1000);
						socket = new Socket(
								InetAddress.getByName(TestServer.HOST),
								TestServer.PORT);
						// 读取服务器数据
						 br = new BufferedReader(new
						 InputStreamReader(
						 socket.getInputStream(),"utf-8"));
						pw = new PrintWriter((new OutputStreamWriter(
								socket.getOutputStream())));
						StringBuffer requestHeader = new StringBuffer();
						requestHeader
								.append("GET " + TestServer.PATH
										+ " HTTP/1.1\n")
								.append("HOST:" + TestServer.HOST + "\n")
								.append("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n")
								.append("Accept-Encoding:gzip, deflate, sdch\n")
								.append("Accept-Language:zh-CN,zh;q=0.8\n")
								.append("Cache-Control:no-cache\n")
								.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")
								.append("Encoding:UTF-8\n")
								.append("Connection:keep-alive" + "\n")
								.append("\n");

						if (isout)
							System.out.println(requestHeader.toString());
						pw.println(requestHeader);//
						pw.flush();
						String line = "";
						if(isout)
						 while((line=br.readLine())!=null)
						 {
						   System.out.println(line);
						 }
						System.out.println("Get the data from csdn......");

					} catch (Exception e)
					{
						e.printStackTrace();
					} finally
					{
						try
							{

								System.out.println("close......");
								// br.close();
								pw.close();
								socket.close();
							} catch (IOException e)
							{
								e.printStackTrace();
							}
					}
			}
	}

遇到的一个问题,就是返回结果总是乱码,我在这里

						 br = new BufferedReader(new
						 InputStreamReader(
						 socket.getInputStream(),"utf-8"))
 设置了多种编码都还是乱码,但是我查看浏览器中编码是UTF-8,不知道这是为什么?

  没事运行这个程序,给别的网站搞点压力,还是不错滴。。。。
时间: 2024-10-29 17:37:17

Java socket 访问网页的相关文章

网络爬虫初步:从访问网页到数据解析

前言: 网络爬虫这个东西看上去还是很神奇的.不过,如果你细想,或是有所研究就知道,其实爬虫并不那么高深.高深的是在我们的数据量很大的时候,就是当我们网络"图"的回环越来越多的时候,应该怎么去解决它. 本篇文章在这里只是起一个抛砖引玉的作用.本文主要是讲解了如何使用Java/Python访问网页并获得网页代码.Python模仿浏览器进行访问网页和使用Python进行数据解析.希望我们以本文开始,一步一步解开网络蜘蛛神秘的一面. 参考: 1.<自己动手写网络爬虫> 2.用pyt

Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)

http://blog.csdn.net/yanzi1225627/article/details/22222735 如前文所示的TCP局域网传送东西,除了对传输层的TCP/UDP支持良好外,Android对HTTP(超文本传输协议)也提供了很好的支持,这里包括两种接口: 1.标准Java接口(java.net) ----HttpURLConnection,可以实现简单的基于URL请求.响应功能: 2.Apache接口(org.appache.http)----HttpClient,使用起来更方

(转)Java Socket编程

原文出自:http://www.cnblogs.com/rocomp/p/4790340.html Socket是网络驱动层提供给应用程序编程接口和一种机制.可以把Socket比喻成一个港口码头,应用程序只要把货物放到港口码头上,就算完成了货物的运送.对于接收方应用程序也要创建一个港口码头,只需等待货物到达码头后将货物取走. InetAddress          InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址.           该类没有构造方法       

java Socket用法详解(转)

在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据. 这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的作用, 这些选项可控制客户建立与服务器的连接, 以及接收和发送数据的行为. 一. 构造Socket Socket的构造方法有以下几种重载形式:

java Socket(详解)转载

在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据. 这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的作用, 这些选项可控制客户建立与服务器的连接, 以及接收和发送数据的行为. 一. 构造Socket Socket的构造方法有以下几种重载形式:

Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

Java Socket编程基础篇

原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 网络基础知识点: 两台计算机间进行通讯需要以下三个条件 IP地址.协议.端口号: IP地址:定位应用所在机器的网络位置.(比如家庭住址:北京市朝阳区XX街道XX小区) 端口号

java兑现html网页的gzip解压

java实现html网页的gzip解压 在对网页抓包中发现,返回的很多网页是经过压缩的,比如访问谷歌首页,返回的头文件中包含Content-Encoding gzip 使用gzip可以省下很多网页流量,在网速一定的情况下,可以提高访问效率,我们用java访问时如何可以得到gzip的返回,并且我们如何解析返回的gzip呢? 我们以访问http://www.baidu.com/为例我们用URL的openStream方法直接访问时并不返回gzip压缩数据,这是因为时候返回gzip需要判断浏览器是否支持

Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: [cpp] view plaincopyprint? #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <string.h> #ifdef _WIN32   ///