2.1 客户端/服务器架构

服务器(Server)是什么东东,有什么用?只知道上网要Web服务器,当然啰,跳出天朝的防火墙

跑到外国去冲浪也要哦!

简单地说,服务器(Server)就是为多个客户端(可以是你的电脑或浏览器)提供服务的, 它存在的

唯一目的就是等待客户端(Client-side)的请求,并响应它们,然后等待更多的请求......

参考: 《Python核心编程(3rd)》 P49~P55

2.2 硬件客户端/服务器架构

      打印Server是硬件服务器的一个例子。它们处理传入的打印作业并将其发送给系统中的打印机或其

它打印设备。这样的计算机通常可以通过网络进行访问,并且客户端计算机将向它发送打印请求!

硬件计算机的另一个例子就是文件服务器,这些通常拥有庞大容量的计算机,可以被客户端远程访

问。客户端计算机会挂载服务器计算机上的磁盘(disk),看上去好像disk就在本地计算机(local host)上一

样。

2.3 软件客户端/服务器架构

      软件服务器也运行在一块硬件上,但是没有像硬件服务器那样的专用外围设备(如打印机,磁盘驱动

器等)。软件服务器提供的主要服务包括程序执行,数据传输检索,聚合,更新,或其他类型的编程或数据

操作。

现在一个更常见的软件服务器就是Web服务器。如果个人或公司想要运行自己的Web Server,那么

必须拥有一台或多台Computer,在上面安装希望提供给用户的Web页面和Web应用程序,然后启动Web

服务器。一个这样的服务器就是接受客户端请求,并向Web客户端(即用户计算机上的浏览器)回送 Web页

面,然后等待下一个客户端的请求。这些服务器一旦开启,除非外力,否则将永远运行......

数据库服务器是另一种类型的软件服务器,它们接受客户端的存储或检索请求,响应请求,然后等待

更多的事务 ,和Web服务器类似,它们也是永远运行的!

最后一类软件服务器就是窗体服务器,它们运行在一台附带(外接)显示设备(如显示器)的计算机

上,窗体客户端其实就是一些程序,这些程序需要一个窗口化的环境来运行。这些通常被当作图形用户界面

(GUI) 应用程序。 如果在没有窗体服务器的情况下运行它们,也即意味着在一个基于文本的环境中, 如

DOS窗口或一个UNIX shell中,那么将无法启动它们。一旦能够访问窗体服务器,那么一切都会正常!

2.4 套接字:通信端点

在玩转服务器之前,先来说说作为通信端点的套接字(Socket)客户端请求之前,必须进行一些初步的

设置流程来为之后的工作做准备,首先会创建一个通信接点,它能够使服务器监听请求。

如果把服务器比作公司主线呼叫的总机接线员。 一旦电话号码和设备安装成功且接线员到达后,服务

就可以开始了! 巴啦巴啦,其实,我们只要知道在通信开始之前, 网络应用程序要创建套接字就对了,可将

它们比作电话插孔,没有它们,通信就无法进行!

1. 创建套接字的方法, 要用到socket模块的socket.socket()函数!

1 import socket
2
3 socket.socket(socket_family, socket_type, protocol = 0)

用 "from socket import *" 这种方法可以导入socket模块的所有属性,大大节省代码

from socket import *socket(scoket_family, socket_type)

2.4.1 socket_family: 套接字家族

UNIX套接字是我们所讲的套接字的第一个家族,它拥有一个"家族名称" AF_UNIX,它表示地址家族

—UNIX, AF是地址家族(address family)的缩写!

第二个家族是面向网络的, 它也有自己的家族名字 "AF_INET" 或者说地址家族—因特网!

另一个地址家族是AF_INET6用于第6版因特网协议(IPv6)寻址,大家可以打开网络中心,查看本地

连接属性,即可知道,除了一个IPv6,还有一个当前使用的因特网协议 IPv4,在所有的地址家族中,"AF

_INET" 是使用最广泛的!

2.4.2 socket_type:套接字类型

1. 面向连接的套接字

无论采用哪种地址家族, 都有两种风格的套接字,一种是面向连接的,一种是无连接的!第一种是面

向连接的, 顾名思义,在进行通信之前必须先建立一个连接, 例如,使用电话系统给一个朋友打电话。这

种类型的通信也称为虚拟电路或流套接字。

面向连接的通信提供序列化的,可靠的和不重复的数据交付,而没有记录边界。 这基本上意味着每条

信息可以拆分为多个片段,并且每一条消息片段都确保能够到达目的地,然后,将它们按顺序组合在一起,

最后将完整消息传递给正在等待的应用程序。

实现这种连接类型的主要协议是传输控制协议 — TCP: (Transmission Control Protocol) 。为了创

建TCP套接字,必须使用 SOCK_STREAM 作为套接字类型。 TCP 套接字的名字 SOCK_STREAM 基于流

套接字的其中一种表示。因为这些套接字 (AF_INET) 的网络版本使用因特网协议(IP: Internet Protocol)

来搜寻网络中的主机,所以整个系统通常结合这两种协议 (TCP和IP)来进行(当然,也可以使用TCP和本

地 [非网络的AF_LOCAL/AF_UNIX] 套接字,但是很明显此时并没有使用IP)

2. 创建 TCP/IP 套接字,用下面的方法调用socket.socket()

1 # 导入socket模块的所有特性
2 from socket import *
3
4 socket(AF_INET, SOCK.STREAM)

2. 无连接的套接字

        与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。这意味着,在通信开

始前并不需要建立连接,此时,在数据传输过程中并无法保证它的顺序性,可靠性或重复性。然而,数据报

确实保存了记录边界,这意味消息是以整体发送的,而并非首先分成多个片段,例如,使用面向连接的协议!

那么,使用数据报套接字有什么优点呢?由于面向连接的套接字所提供的保证,因此它们的设置以及

对虚拟电路连接的维护所需要大量的开销。然而,数据报不需要这些开销,即它的成本very low!

实现这种连接类型的主要协议是用户数据报协议—UDP: (Uesr Datagram Protocol), 为了创建UD

P 套接字,必须使用 SOCK_DGRAM 作为套接字类型。你可能知道,UPD套接字的SOCK_DGRAM 名字来

自于单词 "datagram" (数据报)。因为这些套接字也使用因特网协议来寻找网络中的主机,所以这个系统也

有一个更加普通的名字,即这两种协议(UDP的IP) 的组合名字,或 UDP/IP。

3. 同样,为了创建UDP/IP套接字,需要执行以下语句

1 # 导入socket 模块的所有特性
2 from socket import *
3
4 socket(AF_INET, SOCK_DGRAM)

创建TCP服务器和客户端请参照: http://www.cnblogs.com/Ruby517/p/5811714.html

转载于:https://www.cnblogs.com/Ruby517/p/5808224.html

【卷二】网络编程 一相关推荐

  1. ACE网络编程模式比较

    ACE将网络编程进行了模式化,以便你不必每次都重复相同的代码. 网络编程需要处理的事情多括中断,并发,多线程等,程序格式相对固定,但是健壮的网络程序则相对复杂.为了处理这些情形,ACE内建了几个网络编 ...

  2. Linux学习路线及网络编程经典书籍

    linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/217232 ...

  3. ”linux学习之路” (感觉写的很好,更像是网络编程学习路线图)

    转:https://www.oschina.net/question/587367_156024 很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀 ...

  4. TCP/IP网络编程之四书五经

    TCP/IP网络编程之四书五经 孟岩 TCP/IP协议是目前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要.从 应用上来说,现在直接利用C层次Socket API进行TCP/IP ...

  5. Linux学习路线及网络编程经典书籍(转载)

    linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/217232 ...

  6. Linux网络编程--进程间通信(一)

    进程间通信简介(摘自<Linux网络编程>p85) AT&T 在 UNIX System V 中引入了几种新的进程通讯方式,即消息队列( MessageQueues),信号量( s ...

  7. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口. 最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件 抖动窗口功能 ...

  8. java基于http协议编程_Java中基于HTTP协议网络编程

    java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来访问Web服务功能,这篇博客,就跟大家分享一下,Java中的网络编程的知识,主要是学习下该java.net包下的API. U ...

  9. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  10. Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型

    Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...

最新文章

  1. 2.5.3 工作日处理函数(自定义节假日).sql
  2. IPython、python shell(command line)、pycharm,python,python IDLE的区别是什么?
  3. 云计算开发技术,Python自动化运维开发实战三部分
  4. 说一说ffmpeg到处都在使用的ff_thread_once函数
  5. 微擎jsapi支付必须传openid怎么解决_面经腾讯微信支付面试记
  6. TP的中间件:过滤处理HTTP的请求与响应
  7. nb-iot链路层加密_Google为低端Android手机和IoT设备创建了更快的加密
  8. Spring Boot和Vue的学习(一)--开发环境的安装
  9. 关于TCP三次握手过程
  10. LUNA16数据集肺结节显示亲测
  11. Android入门-新手如何成功创建一个Android小应用
  12. 一文读大厂微服务水平
  13. SVN的正确使用方法以及疑难问题的处理(持续更新与补充)
  14. php 排序指定key,php实现数组按指定KEY排序的方法
  15. 综述 | 结肠细胞代谢如何塑造肠道菌群
  16. 使用deno和oak创建短链应用 1.0
  17. 【C/C++】基础概念
  18. kettle定时备份->mysql+mongoDB增量备份
  19. K.田园的饭可好吃了
  20. 常用数据结构及其应用场景

热门文章

  1. 【转】各种图形格式说明和比较
  2. 微信小程序支付 java
  3. Vivado SMPTE SD/HD/3G-SD学习笔记
  4. Polyworks插件开发(一)——插件开发基本介绍
  5. 在Linux中安装P4遇到的问题
  6. cc2530 为什么有 晶体振荡器和 RC振荡器等
  7. Linux 5.4内核 exFAT格式U盘所需配置项
  8. Windows与Mac获取文件绝对路径的快捷键
  9. 小点补充:print 函数输出字符串
  10. 漫谈程序员系列:程序员零门槛?