如何写一个简单的Web Server(一)
在本篇博文中我将介绍如何写一个Web Server.博文中大部分资料我是参考的这篇文章(http://www.linuxhowtos.org/C_C++/socket.htm),英文不错的同学可以参考这篇文章。
进程间通信
在操作系统中,进行通信的实际上是进程而不是程序,进程可以被认为是运行在端系统中的程序。当进程运行在相同的端系统的时候,他们使用进程间通信机制相互通信。进程间相互通信的规则是由端系统上的的操作系统确定的。
客户机和服务器进程
网络应用程序是由成对的进程组成,这些进程通过网络互相发送报文。在C/S架构的应用程序中,一个客户机浏览进程与一台服务器进程交换报文。在一个P2P文件共享系统中,文件从一个对等方的进程传送到另一个对等方的进程,在每对通信进程中我们通常将这两个进程标示为客户机(client),而另一个进程标示服务器(server)。在Web中浏览器进程是一个客户机进程,Web服务器是服务器进程。对于P2P文件共享。下载文件的对等方被标示为客户机,上载文件的对等发被标示为服务器。在P2P文件共享等应用中,一个进程即可能是客户机也可能是服务器,实际上在一个P2P文件共享系统中,一个进程既能上载文件也下载文件,但无论如何,在一对通信进程中,我们任然能标示客户机和服务器,我们定义客户机和服务器进程如下:
在给定的一对进程之间的通信会话,发起通信的进程被标示为客户机,在会话开始等待联系的进程是服务器。- 进程与计算机网络之间的接口(socket)
多数的应用程序是由通信进程组成的,每对中两个进程互相发送报文,从一个进程向另一个进程发送的报文必须通过网络发送,进程通过套接字(socket)的软件接口在网络上发送和接收报文。进程相当于一座房子,当一个进程向另一台进程发送报文时,它将报文推出门(套接字),该发送进程到另一接收进程有用于运输的基础设施,该设施将报文传送到目的进程的门口,一旦目的报文抵达到目的主机,目地报文通过门(套接字)传递,然后接收进程对报文进行处理。下图表示两个主机进程通过套接字通信:
套接字(socket)类型
当套接字进程被创建之后,需要实例化地址域和套接字的类型,拥有相同的地址域和相同的套接字类型的进程才能够互相通信;有两个广泛使用的地址域。
1.unix domain: 两个进程通过共享一个共同的文件系统来通信。
2.Internet domain: 两个进程通过因特网通信 。在unix domain中套接字的地址是由字符串组成的,用于进入文件系统; 在Internet domain 中套接字的地址是主机在因特网上的IP地址。
有两种广泛使用的套接字类型:
1.stream sockets: 通过字符流的方式进行通信
2.datagram sockets:一次读取所有的信息stream sockets 和 datagram都有各自的运输层协议,stream sockets使用TCP协议(TCP协议是面向连接,并且为两个端系统之间的数据流动提供可靠的字节流通道); datagram sockets 使用UDP协议(UDP是无连接的,从一个端系统向另一个端系统发送独立的数据分组,不对交付提供任何保证)。
端口
然而套接字通信还需要主机上的端口号,端口号是由十六位的无符号整型组成的,在Unix中端口号较小的都被标准服务使用了,例如21号端口就是FTP服务的端口号;但是端口号大于2000的我们是可以使用的。
介绍完这些基础的知识之后,下篇将通过客户机和服务器的代码来对套接字通信的过程做更加深刻的分析
如何写一个简单的Web Server(一)的更多相关文章
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 编写一个简单的Web Server
编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...
- 动手写一个简单的Web框架(模板渲染)
动手写一个简单的Web框架(模板渲染) 在百度上搜索jinja2,显示的大部分内容都是jinja2的渲染语法,这个不是Web框架需要做的事,最终,居然在Werkzeug的官方文档里找到模板渲染的代码. ...
- 动手写一个简单的Web框架(Werkzeug路由问题)
动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的, ...
- 动手写一个简单的Web框架(HelloWorld的实现)
动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
- express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
- 写一个简单的Web框架
在.Net中有两种常用的Web开发方式,一种是Asp.Net WebForm,另一种是Asp.Net MVC.我先简单的给大家介绍下这两种开发方式的特点,然后再应用自定义脚本映射,反射,json2te ...
随机推荐
- 【风马一族_xml】Schema--- xml的约束技术
Schema 是xml的约束技术,出现的目的是为了替代dtd 本身也是一个xml,非常方便使用xml的解析引擎进行解析 对名称空间有非常好的支持 支持更多的数据类型,并且支持用户自定义数据类型 可以进 ...
- 实例分析ELF文件动态链接
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台 ...
- ubuntu12.04 下安装matlab2012
1.下载matlab2012a(例如:****.iso) 2.创建挂载目录 sudo mkdir /media/matlab 3.将当前目录切换到镜像文件的目录,然后将镜像文件挂载到刚刚创建的目录下 ...
- centos -bash-4.1$ 不显示用户名路径
1.在Terminal输入: vi ~/.bash_profile 2.如果没有.bash_profile可以自己添加.然后往文件中添加如下内容: export PS1=’[\u@\h \W]$ 注意 ...
- 浅谈JavaScript中的string拥有方法的原因
我们都知道,JavaScript数据类型分两大类,基本类型(或者称原始类型)和引用类型. 基本类型的值是保存在栈内存中的简单数据段,它们是按值访问的.JS中有五种基本类型:Undefined.Null ...
- sublime text2支持ng
这里面记录了sublime text3的一些破解和sublime text2支持ng的方法. http://weblogs.asp.net/dwahlin/archive/2013/08/30/usi ...
- (一)、NodeJS (转载)
NodeJS基础 ------ 转载自阿里巴巴 什么是NodeJS JS是脚本语言,脚本语言都需要一个解 ...
- ASP.NET中@Page指令中的AutoEventWireup
AutoEventWireup:指示控件的事件是否自动匹配 (Autowire).如果启用事件自动匹配,则为 true:否则为 false.默认值为 true.如果设为false,则事件不可用.有关更 ...
- C#操作xml
最进在做一个项目,需要用到xml做配置文件,但是自己忘的差不多了,所以就温习了一遍.以下是我项目中所用到的,所以肯定也不全面. 1.新建xml文件 using System.Xml;//需要引用 st ...
- struts2集成javamail发邮件(带附件)实践记录
一.代码预览 这两天在做struts2上的邮件发送.以前的项目有用到spring,用spring提供的邮件支持类很方便可以完成这个功能,但是现在只用struts2的话,就碰到了一系列的问题. 代码是从 ...