精华内容
下载资源
问答
  • 自己写代理服务器

    千次阅读 2013-10-05 19:25:24
    代理服务器是一个非常容易制作的软件,在IBM上看到一个牛人写的JAVA代理服务器,代码虽简短,但是功能齐全,非常稳定。分享一下: ... 何必去用CCPROXY这样的软件呢,程序员们自己写一个吧。

    代理服务器是一个非常容易制作的软件,在IBM上看到一个牛人写的JAVA代理服务器,代码虽简短,但是功能齐全,非常稳定。分享一下:

    http://www.ibm.com/developerworks/cn/java/l-javaproxy/

    何必去用CCPROXY这样的软件呢,程序员们自己写一个吧。

    展开全文
  • 相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇...Web服务器Web服务器是一个复杂的系统,一个Web服务器要为一个Servlet的请求提供

    相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是Tomcat的源码的确让人看起来头疼。笔者就在这里和大家共同分析一个简单的Web服务器是如何工作的源码下载地址

    Web服务器

    Web服务器是一个复杂的系统,一个Web服务器要为一个Servlet的请求提供服务,需要做三件事:

    1、创建一个request对象并填充那些有可能被所引用的Servlet使用的信息,如参数、头部、cookies、查询字符串等等。一个request对象是javax.servlet.ServletRequestjavax.servlet.http.ServletRequest接口的一个实例

    2、创建一个response对象,所引用的servlet使用它来给客户端发送响应。一个response对象是javax.servlet.ServletRequestjavax.servlet.http.ServletRequest接口的一个实例。

    3、调用servletservice方法,并传入requestresponse对象。这里servlet会从request对象取值,给response写值。

    在正式展示代码之前还需要了解一些必须额HTTP的知识(如果您对此非常熟悉您可以直接看下面分析代码)

    HTTP

    HTTP的定义不知道的童鞋可以自己去度娘,这里主要要说的就是HTTP协议的格式

    HTTP请求包括三部分

    1、方法、统一资源标识符(URI)、协议/版本

    2、请求的头部

    3、主题内容

    下面是一个HTTP请求的例子

    POST /examples/default.jsp HTTP/1.1 
    Accept: text/plain; text/html 
    Accept-Language: en-gb 
    Connection: Keep-Alive 
    Host: localhost 
    User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) 
    Content-Length: 33 
    Content-Type: application/x-www-form-urlencoded 
    Accept-Encoding: gzip, deflate 
     
    lastName=Franks&firstName=Michael  

    第一行表明这是POST请求方法,/examples/default.jspURIHTTP/1.1是协议以及版本。其中URI指明了一个互联网资源,这里通常是相对服务器根目录解释的,也就是说这个HTTP请求就是告诉服务器我需要这个文件目录如下:根目录/ examples/default.jsp

    最后一行是HTTP的主题内容,Servlet会处理请求的主题内容,然后返回给客户端HTTP响应。

    类似于HTTP请求,一个HTTP响应也包括上面三个部分。

    1、方法、统一资源标识符(URI)、协议/版本

    2、响应的头部

    3、主题内容

    下面是一个HTTP响应的例子

    HTTP/1.1 200 OK 
    Server: Microsoft-IIS/4.0 
    Date: Mon, 5 Jan 2004 13:13:33 GMT 
    Content-Type: text/html 
    Last-Modified: Mon, 5 Jan 2004 13:13:12 GMT 
    Content-Length: 112 
     
    <html> 
    <head> 
    <title>HTTP Response Example</title> 
    </head> 
    <body> 
    Welcome to Brainy Software 
    </body> 
    </html>

    第一行告诉协议版本,以及请求成功(200表示成功)

    响应头部和请求头部一样,一些有用的信息。响应的主体就是响应本身HTML内容。

    好了基本知识介绍完毕,下面开始解释代码

    部分相关代码

    import java.net.Socket;
    import java.net.ServerSocket;
    import java.net.InetAddress;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.IOException;
    import java.io.File;
    
    public class HttpServer {
    
    	public static final String WEB_ROOT = System.getProperty("user.dir")
    			+ File.separator + "webroot";
    
    	private static final String SHUTDOWN_COMMAND = "/SHUTDOWN";
    
    	private boolean shutdown = false;
    
    	public static void main(String[] args) {
    		HttpServer server = new HttpServer();
    		server.await();
    	}
    
    	public void await() {
    		ServerSocket serverSocket = null;
    		int port = 8080;
    		try {
    			serverSocket = new ServerSocket(port, 1,
    					InetAddress.getByName("127.0.0.1"));
    		} catch (IOException e) {
    			e.printStackTrace();
    			System.exit(1);
    		}
    
    		while (!shutdown) {
    			Socket socket = null;
    			InputStream input = null;
    			OutputStream output = null;
    			try {
    				socket = serverSocket.accept();
    				input = socket.getInputStream();
    				output = socket.getOutputStream();
    
    				Request request = new Request(input);
    				request.parse();
    
    				Response response = new Response(output);
    				response.setRequest(request);
    				response.sendStaticResource();
    
    				socket.close();
    
    				shutdown = request.getUri().equals(SHUTDOWN_COMMAND);
    			} catch (Exception e) {
    				e.printStackTrace();
    				continue;
    			}
    		}
    	}
    }

    HttpServer类代表一个web服务器。首先提供一个WEB_ROOT所在的目录和它下面所有的子目录下静态资源。其次定义了一个中止服务的命令,也就是说当得到的请求后面跟/shutdown的时候停止服务,默认是把服务设置为开启。下面就是进入main函数了,首先实例化一个HttpServer类,然后就是通过await方法等待客户端发来的请求。如果客户端输入的URL不是http://localhost:8080/SHUTDOWN则表示不停止服务器,然后就是继续执行await方法中的内容,在await方法中最重要的就是定义两个对象,一个是request一个是response,下面就来说说RequestResponse类。

    import java.io.InputStream;
    import java.io.IOException;
    
    public class Request {
    
    	private InputStream input;
    	private String uri;
    
    	public Request(InputStream input) {
    		this.input = input;
    	}
    
    	public void parse() {
    
    		StringBuffer request = new StringBuffer(2048);
    		int i;
    		byte[] buffer = new byte[2048];
    		try {
    			i = input.read(buffer);
    		} catch (IOException e) {
    			e.printStackTrace();
    			i = -1;
    		}
    		for (int j = 0; j < i; j++) {
    			request.append((char) buffer[j]);
    		}
    		System.out.print(request.toString());
    		uri = parseUri(request.toString());
    	}
    
    	private String parseUri(String requestString) {
    		int index1, index2;
    		index1 = requestString.indexOf(' ');
    		if (index1 != -1) {
    			index2 = requestString.indexOf(' ', index1 + 1);
    			if (index2 > index1)
    				return requestString.substring(index1 + 1, index2);
    		}
    		return null;
    	}
    
    	public String getUri() {
    		return uri;
    	}
    
    }

    首先调用InputStream对象中的read方法获取HTTP请求的原始数据,然后在parseUri方法中获得uri也就是要请求的静态资源。说白了Request类的主要作用就是告诉服务器用户要的是什么也就是在http://localhost:8080后面出现的东西。

    import java.io.OutputStream;
    import java.io.IOException;
    import java.io.FileInputStream;
    import java.io.File;
    
    public class Response {
    
    	private static final int BUFFER_SIZE = 1024;
    	Request request;
    	OutputStream output;
    
    	public Response(OutputStream output) {
    		this.output = output;
    	}
    
    	public void setRequest(Request request) {
    		this.request = request;
    	}
    
    	public void sendStaticResource() throws IOException {
    		byte[] bytes = new byte[BUFFER_SIZE];
    		FileInputStream fis = null;
    		try {
    			File file = new File(HttpServer.WEB_ROOT, request.getUri());
    			if (file.exists()) {
    				fis = new FileInputStream(file);
    				int ch = fis.read(bytes, 0, BUFFER_SIZE);
    				while (ch != -1) {
    					output.write(bytes, 0, ch);
    					ch = fis.read(bytes, 0, BUFFER_SIZE);
    				}
    			} else {
    				
    				String errorMessage = "HTTP/1.1 404 File Not Found\r\n"
    						+ "Content-Type: text/html\r\n"
    						+ "Content-Length: 23\r\n" + "\r\n"
    						+ "<h1>File Not Found</h1>";
    				output.write(errorMessage.getBytes());
    			}
    		} catch (Exception e) {
    			
    			System.out.println(e.toString());
    		} finally {
    			if (fis != null)
    				fis.close();
    		}
    	}
    }

    Response类代表一个HTTP响应。首先Response接收一个OutputStream对象,然后通过sendStaticResource方法对接收的Request进行处理,整个处理过程就是根据请求在服务器端进行寻找对应静态资源的过程。找到所需要的资源后发送给客户端然后让客户端显示出来。

    运行程序

    运行上面的HttpServer类,然后在浏览器的地址栏中键入下面的地址:http:localhost:8080/index.jsp,然后你会在浏览器中看到index.jsp页面。

    在控制台可以看到类似于下面的HTTP请求

    GET /index.jsp HTTP/1.1
    Host: localhost:8080
    Connection: keep-alive
    Cache-Control: max-age=0
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7 360EE
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: zh-CN,zh;q=0.8
    Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3


    小结

    上面自己动手写的这个所谓的服务器仅仅有三个类组成,从功能上来说他只能显示一些静态的资源,并不是全部功能。一个优秀的服务器还有很多细节要做,但是出于学习的目的大家现在有这些了解就足够了,后面还会有对服务器的详细介绍,敬请期待。

    参考资料《How Tomcat Works》

    展开全文
  • 自己写HTTP服务器(一)http协议

    千次阅读 2019-01-16 12:23:29
    HTTP服务器之前,我们首先要来了解一下http协议  在讲HTTP协议之前,我们先来说说URL (一)URL:  URL就是我们平时俗称的“网址”  互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置...

     在写HTTP服务器之前,我们首先要来了解一下http协议

        在讲HTTP协议之前,我们先来说说URL

    (一)URL:

        URL就是我们平时俗称的“网址”

        互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

        基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。完整的、带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

    (二)http请求

          首先我们先来简单了解一下HTTP请求的格式

       HTPP请求分为四个部分:

    • 1.首行:方法 + url + 版本号

    • 2.Hander:请求的属性,用冒号分割出来的键值对,每组属性之间用换行分隔(有的使用\n,有的使用\r,有的使用\r\n),遇到空行表示hander部分结束

    • 3.空行

    • 4.正文:请求所附带的参数

    POST http://www.wrox.com/WileyCDA/ HTTP1.1
    Host: www.wrox.com
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 40
    Connection: Keep-Alive
    
    name=Professional%20Ajax&publisher=Wiley

        一般情况下POST请求会将参数放在正文部分,同时会在Hander部分通过Content_Length来告诉服务器正文部分的大小;GET请求会将参数放在URL中,参数之间都是通过&隔离开的

     

        接着我们再来看看HTTP响应的格式

    HTTP/1.0 200 OK
    Content-Type: text/plain
    Content-Length: 39
    Expires: Thu, 05 Dec 1997 16:00:00 GMT
    Last-Modified: Wed, 5 August 1996 15:55:28 GMT
    Server: Apache 0.84
    
    <html>
      <body>Hello World</body>
    </html>
    • 1.请求行:版本号 + 状态码 + 状态码解释

    • 2.Hander:请求的属性,冒号分割的键值对,每组属性之间通过\n分开,遇到空行结束

    • 3.空行

    • 4.正文部分:在Hander中Content-Length属性来标识正文长度,例如如果服务器返回了一个html页面,那么html的内容就在正文中

     

    (三)HTTP请求方法

          HTTP定义了服务器与客户端之间的交互方式,最常见的GET,POST请求,以及PUT,DELATE等

     

    (四)HTTP状态码

        常见的状态码有,比如200(OK),404(Not Found),403(Forbidden),302(Redirect,重定向)等等

      

    (五)HTTP常见的Hander字段

        Content-Type:数据类型(text/html等)

        服务器在给客户端做回应的时候,必须要告诉客户端数据的格式是什么,Content-Type属性就是用来标识数据格式的

        Content-Length:正文长度,用来告诉服务器正文部分大小

     

        以上就是关于Http协议的基本, 是自己编写HTTP服务器的基础

    展开全文
  • Telnet测试自己写的TCP服务器

    千次阅读 2018-07-19 14:27:38
    有时候我们一个tcp的服务器程序,需要让客户端发起一个连接,来验证是否能正确的 绑定到端口 接受连接 接受数据 通常我们需要一个客户端,但是如果你用telnet的话,那就不用为了上面的这个目的而一个...

    Telnet 也是一个linux的命令 详情可以查看  http://man.linuxde.net   这是linux命令大全所有的命令和参数都能查到

    有时候我们写一个tcp的服务器程序,需要让客户端发起一个连接,来验证是否能正确的

    绑定到端口

    接受连接

    接受数据

    通常我们需要写一个客户端,但是如果你用telnet的话,那就不用为了上面的这个目的而写一个客户端了。

    也许你会说,telnet不是用的是23端口吗?除非你的程序绑定到23端口,但是那也不可能啊,因为23已经被telnet的服务器给占用了啊,怎么可能做到?从这个层面讲的话,确实好像不可以了,但是telnet客户端是可以指定要连接的服务器的端口的。

    telnet [ip地址] [端口号]

    例如:

    telnet localhost 65100

    假设你的服务器监听的就是65100,那么上面的这个命令就是让telnet向你的服务器发起一个tcp的连接。接着在telnet窗口中输入任何字符,这些字符会发动到你的服务器,为了验证你收到这些字符,当你的服务器收到这些包后,可以给telnet也发包。不过注意在telnet客户端发包的你每敲入一个字符就发送一个包,而不是等你回车。

    在你用Telnet连接端退出时 需要按 Ctrl+】 出现Telnet>时输入quit

    展开全文
  • 自己写一个Web服务器(1)

    千次阅读 2017-02-08 15:56:23
    自己写一个Web服务器(1) 2016-04-13 分类:操作系统、编程开发、首页精华1人评论 分享到:更多15 本文由码农网 – 王坚原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 自己...
  • 如何让自己写服务器支持php?

    千次阅读 2011-12-24 22:12:14
    一个支持支持静态的文件的c服务器很简单,就是些文件目录等操作,如何一个支持get方式php的呢? 很简单的可以用一个shell搞定 ,例如,但是如何支持post等操作呢? #include void command_mess(char *command...
  • 1.自己动手RTP服务器——关于RTP协议 http://www.cnblogs.com/lidabo/p/4160138.html 2.自己动手RTP服务器——用RTP协议传输TS流 http://www.cnblogs.com/lidabo/p/4160145.html 3.自己动手...
  • 没事,我也不会,我是看完我的这篇文章才会的。 废话不多说,我不知道你目前进展到哪一步,我只是来讲讲我怎么将我的朴(chou)素(lou)的html公布于世。 step1: 注册账号并连接到服务器(我用腾讯云讲述...
  • 自己动手RTP服务器——关于RTP协议 本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识。 关于RTP协议的必备知识 要动手实现一个协议,...
  • 终于有人把域名和DNS服务器明白了

    万次阅读 多人点赞 2020-05-10 16:39:17
    终于有人把域名和DNS服务器明白了
  • 想要用lamp做个网站,但是想不通我们之前用java写客户端,服务器什么的,,这些东西不都可以用apache吗,或者tomcat 代替自己写服务器 为什么还需要自己写嘞? 这三者分别做什么功能 怎么用呀?
  • 谈谈怎么样把自己写好的java工程打包发送到云服务器上并运行成功看到在搞活动,所以自己也花钱买了一年的云服务器来练练手,也是第一次尝试把java工程发布到云服务器上,经过不断的查询资料和尝试,终于成功,现在...
  • 1. 前言 如今一提到服务器首先就...俗话说自己动手丰衣足食,今天我们就来实现一个简单的静态web服务器。 2. http协议 谈到浏览器,服务器时,作为计算机行业从业者,首先想到的就是www、http、https、html等等,...
  • 自己写的登陆界面,有自己的学号密码,怎么访问到学校服务器,获取自己的学生信息,没有接口,求大神解答啊,如果会可以给报酬!
  • 给你一台服务器,你能把你的代码部署到线上吗? 我们常常会听到这样一句话:“为了让研发只关心业务开发,我们做了某某某!”做了啥呢,做了让你不用关心,系统搭建、技术框架、核心组件、通用模块以及上线应用时...
  • 自己动手——快速搭建Java应用服务器

    万次阅读 多人点赞 2017-05-08 11:33:17
    这套帖子的目的,是在自己学会、实现并熟练掌握之后,想帮助下面将会提到的这样一群正在学习Android的新手(虽然我自己也是新手),通过自己的经验传递出去,让他们少走一点弯路,节省大量用在查询和翻阅资料的...
  • 代理服务器的工作流程就是:把client的访问请求发送到proxy,proxy再把这些数据转到server,然后server对这个请求产生响应数据,发送到proxy,proxy再把这些数据转到client。经过了proxy,那就可以做好多事情了哈,...
  • 自己动手http服务器---java版

    万次阅读 2013-10-05 17:52:41
    最简单的http服务器,可下载源码:...1.通过socket向服务器发送一个符合一定格式的请求字符串(里面包含了用户输入的网址),比如: Accept text/html,application/xhtml+xml,
  • 自己动手RTP服务器——传输所有格式的视频 上一篇文章我们介绍了如何用一个简单的UDP socket搭建一个RTP服务器。我把这份80行的代码呈现到客户面前的时候,就有人不满意了。 还有人在参考的时候会问:“楼主你的...
  • 用telnet来测试你自己写的TCP服务器

    千次阅读 2013-06-07 16:13:14
    有时候我们一个tcp的服务器程序,需要让客户端发起一个连接,来验证是否能正确的 绑定到端口 接受连接 接受数据 通常我们需要一个客户端,但是如果你用telnet的话,那就不用为了上面的这个目的而一个客户端...
  • 自己写一个简单的Web服务器(附Demo)

    千次阅读 2015-03-22 22:52:47
    先来个例子亲身体验一下。下面的示例代码演示了如何通过 java.net.Socket 与 java.net.ServerSocket这两个重要的类创建一个简单基于 Java 的 Web 服务器 。这个服务器通过8784号端口提供访问,向浏览器返回一个...
  • 完上一篇的c语言版,不过瘾,把proxy改写成python版哈。其他不说,可参见上一篇,现在就直接上代码(刚好,新鲜出炉~): import socket apaaddr=('127.0.0.1',8088) seraddr=('127.0.0.1',8080) ser=...
  • 利用的是GitHub Pages提供的静态服务就可以挂在到上边你的所有静态文件。 如果以前用过git代码管理工具那就更简单了。
  • 对于web服务器,要尽量的减小服务器的负担。如果,浏览器已经取消请求连接,web服务器就不应该再向浏览器发送页面的数据了。我本次是测试web服务器是如何知道浏览器已经取消了请求哪?  如果浏览器取消请求,web...
  • 快速搭建一个自己服务器详解(java环境)

    万次阅读 多人点赞 2018-07-19 22:12:51
    服务器的购买 1. 我选择的是阿里云的服务器,学生价9.5元一个月,百度直接搜索阿里云,然后点击右上角登录,推荐大家用支付宝扫码登录,方便快捷。阿里云官网的东西比较多,登录后我找了很久也没有找到学生服务器...
  • 自己用java一个http和https代理服务器

    千次阅读 热门讨论 2019-05-13 16:21:37
    当然,如果这个实现的代理器只是你自己用的话或者少数几个人用的话,我觉得完全没问题,自己也试了,看视频啥的也没啥问题(如果你看的视频需要全部下载到本地后才能播放,那就只能把socket的过期时间设置长点了,...
  • java的http服务器源码,个人觉得还行,在CSDN博客上的教程: [url=http://blog.csdn.net/ajaxhu/article/details/12316501]http://blog.csdn.net/ajaxhu/article/details/12316501[/url]
  • 从零开始一个RTSP服务器(一)RTSP协议讲解

    万次阅读 多人点赞 2019-08-09 20:17:55
    从零开始一个RTSP服务器系列 从零开始一个RTSP服务器(一)不一样的RTSP协议讲解 从零开始一个RTSP服务器(二)RTP传输H.264(待) 从零开始一个RTSP服务器(三)一个传输H.264的RTSP服务器(待) 从零开始...
  • 要协议一个web服务器,需要了解http协议,下面我们来看一下当浏览器请求网张的时候向web服务器发送的...其实,访问一个网站就是浏览器web服务器指定端口发送信息,然后,web服务器向浏览器发送网页的内容, 1。使用tel

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,134,561
精华内容 453,824
关键字:

如何自己写服务器