在本篇博文中我将介绍如何写一个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. dubbo使用遇到的问题

    转自:http://blog.csdn.net/liwf_/article/details/40297121?utm_source=tuicool&utm_medium=referral 把一 ...

  2. Min Stack [LeetCode 155]

    1- 问题描述 Design a stack that supports push, pop, top, and retrieving the minimum element in constant ...

  3. PHP开发大型项目的一点经验

    一.变量 最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候.变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆.变量 ...

  4. 搭建高性能计算环境(四)、应用软件的安装之VASP

    1,将需要的软件包上传vasp.5.2.12.tar.gz.vasp.5.lib.tar.gz.benchmark.Hg.tar.gz. 2,创建vasp目录并解压软件包. mkdir /opt/va ...

  5. js 定位到指定位置

     <script>    //滚动定位到product         function scroll() {             var scroll_offset = $(&quo ...

  6. POJ C++程序设计 编程题#4 字符串操作

    编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给 ...

  7. C# app.config文件配置和修改

    很多时候我们需要对系统的.config文件进度读写操作,例如:系统初始化的参数的更改.系统参数的改变都需要更新到配置文件. 首先我们有必要了解一下app.config.exe.config和vshos ...

  8. Sql Server 常用的查询

    基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 selec ...

  9. 这次一定理清晰ThinkPHP之中的模型、数据库之间命名规范

    ServiceSiteModel.class.php 这个模型操控的数据库是service_site表: <?php namespace Admin\Model; use Think\Model ...

  10. MySQL: ON DUPLICATE KEY UPDATE 用法 避免重复插入数据

    INSERT INTO osc_visit_stats(stat_date,type,id,view_count) VALUES (?,?,?,?) ON DUPLICATEKEY UPDATE vi ...