在本篇博文中我将介绍如何写一个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(一)的更多相关文章

  1. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  2. 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  3. 编写一个简单的Web Server

    编写一个简单的Web Server其实是轻而易举的.如果我们只是想托管一些HTML页面,我们可以这么实现: 在VS2013中创建一个C# 控制台程序 编写一个字符串扩展方法类,主要用于在URL中截取文 ...

  4. 动手写一个简单的Web框架(模板渲染)

    动手写一个简单的Web框架(模板渲染) 在百度上搜索jinja2,显示的大部分内容都是jinja2的渲染语法,这个不是Web框架需要做的事,最终,居然在Werkzeug的官方文档里找到模板渲染的代码. ...

  5. 动手写一个简单的Web框架(Werkzeug路由问题)

    动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的, ...

  6. 动手写一个简单的Web框架(HelloWorld的实现)

    动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...

  7. 【Java学习笔记】如何写一个简单的Web Service

    本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...

  8. express 写一个简单的web app

    之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...

  9. 写一个简单的Web框架

    在.Net中有两种常用的Web开发方式,一种是Asp.Net WebForm,另一种是Asp.Net MVC.我先简单的给大家介绍下这两种开发方式的特点,然后再应用自定义脚本映射,反射,json2te ...

随机推荐

  1. leetcode 14

    14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array ...

  2. HTML5 CSS3简要教程

    Web 设计师可以使用HTML4和CSS2.1完成一些很酷的东西.我们可以在不使用陈旧的基于table布局的基础上完成文档逻辑结构并创建内容丰富的网站.我们可以在不使用内联<font>和& ...

  3. VHDL学习札记:library and Package

     参考:http://www.cnblogs.com/garylee/archive/2012/11/16/2773596.htmlhttp:// http://forums.xilinx.com ...

  4. node.js回调函数 - 阻塞与非阻塞

    1.阻塞调用(读取完文件再执行后面的操作) var fs = require("fs"); var data = fs.readFileSync('/fs.txt'); conso ...

  5. POJ C程序设计进阶 编程题#1:寻找下标

    编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一 ...

  6. PeopleSoft Object Types Definitions

     PeopleSoft stores object definitions types such as Record, Field and SQL definitions as numbers in  ...

  7. php全角字符转换为半角函数 实例代码

    PHP全角半角转换函数,把目前能找到的所有全角都列出来了一个个替换吧. 之前试过网上找的通过ASCII之类的字符替换,发现很多莫名其妙的问题.最后还是换成下面的字符替换方式了,把目前能找到的所有全角都 ...

  8. IEnumerable 接口 实现foreach 遍历 实例

    额 为啥写着东西? 有次面试去,因为用到的时候特别少 所以没记住, 这个单词 怎么写! 经典的面试题: 能用foreach遍历访问的对象的要求? 答:  该类实现IEnumetable 接口   声明 ...

  9. Python 2.7的安装(64位win10)

    Python 2.7.12 下载地址:https://www.python.org/downloads/release/python-2712/ 安装路径D:\Program Files\Python ...

  10. 包装类(Wrapper Class)

    1)包装类.针对于原生数据类型的包装.所有的包装类(8个)对位于java.lang包下.java中的8个包装类分别是:Byte,Short,Integer,Long,Float.Double,Char ...