Python 之网络式编程

一 客户端/服务器架构

即C/S架构,包括

1、硬件C/S架构(打印机)

2、软件B/S架构(web服务)

C/S架构与Socket的关系:

我们学习Socket就是为了完成C/S的开发

二 OSI七层

引子:  

  计算机组成原理:硬件、操作系统、应用软件三者组成。

  具备以上条件后,计算机就可以工作,如果你要和别人一起玩,那你就需要上网了。互联网的核心就是由一堆协议组成,协议就是标准。

 

为什么学习Socket之前要先了解互联网协议?

  1、C/S架构的软件(应用软件属于应用层)是基于网络进行通信的

  2、网络的核心即一堆协议,协议即标准,想开发一款基于网络通信的软件,就必须遵循这些标准

Python 之网络式编程

OSI七层:

Python 之网络式编程

三 Socket层

Python 之网络式编程

四 Socket是什么 

  Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,在设计模式中,Socket其实就是一个门面模式,它把负责的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

  所以,我们无需深入学习理解TCP/UDP协议,Socket已经为我们封装好了,我们只需要遵循Socket的规定去编程,写出的程序自然就是遵循TCP/UDP标准的。

五 套接字发展史及分类

  套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字成为“伯克利套接字”或“BSD套接字”。一开始,套接字被设计用在一台主机上多个应用程序之间的通信,这也被称作进程间通许或IPC。套接字有两种(或者称为两个种族),分别是基于文件型和就网络型。

基于文件类型的套接字家族

套接字家族的名字:AF_UNIX

  UNIX一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器上,可以通过访问同一文件系统间接完成通信。

基于网络类型的套接字家族

套接字家族的名字:AF_INET

  还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,Python支持很多地址家族,但是由于我们只关心网络编程,所以大部分时候我们只使用AF_INET(AF:Address Family;INET:Internet)

六 套接字工作流程

  生活中,你要打电话给一个朋友,先拨号,朋友听到电话铃声响后接打电话,这时你和你的朋友就建立起了连接,就可以讲话了,等交流结束,挂断电话结束此次通话。

Python 之网络式编程

 利用Socket模拟生活中打电话:

Python 之网络式编程

Python 之网络式编程

1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 5 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买手机;socket.AF_INET:基于网络协议;socket.SOCK_STREAM:基于流的TCP协议 6 phone.bind(('127.0.0.1', 8080)) # 绑定手机卡;元祖形式,ip地址+端口 7 # 注:服务器的ip地址写本机的ip地址 8 phone.listen(5) # 开机 9 conn, addr = phone.accept() # 等电话 10 msg = conn.recv(1024) # 收消息 11 print('客户端发来的消息是:', msg) 12 conn.send(msg.upper()) # 发消息 13 conn.close() 14 phone.close()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywzdz.html