python之路-网络编程,,一. 楔子  两个程


一. 楔子

  两个程序之间想要传递一个数据,需要用到网络通信.

二. 软件开发的架构:

  第一种: 应用类: qq,微信,网盘,优酷 这一类是属于需要安装的桌面应用.

  第二种: web类: 百度,知乎,博客园,等使用浏览器访问就可以直接使用的应用.

这些应用的本质其实就是两个程序之间的通讯,而这两个分类又对应了两个软件开发的架构.

  1.C/S 架构

C/S即: client与server,中文意思: 客户端与服务器端架构,这种架构也是从用户层面,(也是物理层面划分的).

  2.B/S 架构

B/S即:browser和server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分.

browser浏览器,其实也是一种client客户端,只是这个客户端不需要大家去安装什么应用程序,只是需要通过http请求服务器端相关的资源(网页资源),客户端browser浏览器就能进行增删改查.

三. 网络基础.

  1. osi七层模型.

  2.socket概念

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

其实站在你的角度上看,socket就是一个模块.我们通过调用模块中实现的方法
建立两个进程之间的连接和通信.也有人将socket说成ip+port,因为ip是用来标识互联网中的一台主机的位置,
而port是用来标识这台机器上的一个应用程序,
所以我们只要确立了ip和port就能找到一个应用程序,并且使用socket模块来与之通信.

  3. tcp协议和udp协议

TCP 可靠的.面向连接的协议,传输效率低全双工通信(发送缓存,接收缓存),面向字节流.

使用TCP的应用: web浏览器;电子邮件;文件传输程序.

UDP 不可靠的,无连接的服务,传输效率高(发送钱延迟小),一对一,一对多,多对多,面向报文,尽最大努力服务,无拥塞控制,使用UDP的应用: 域名系统(DNS); 视频流,IP语音.

技术分享图片

四.套接字(socket)初使用.

1. 基于TCP协议的socket

tcp是基于连接的,必须先启动服务器,然后再启动客户端去连接服务器.

server端

技术分享图片
import socketsk = socket.socket()sk.bind((‘127.0.0.1‘,8898))  #把地址绑定到套接字sk.listen()          #监听链接conn,addr = sk.accept() #接受客户端链接ret = conn.recv(1024)  #接收客户端信息print(ret)       #打印客户端信息conn.send(b‘hi‘)        #向客户端发送信息conn.close()       #关闭客户端套接字sk.close()        #关闭服务器套接字(可选)
View Code

client端

技术分享图片
import socketsk = socket.socket()    # 创建客户套接字sk.connect((‘127.0.0.1‘,8000))    # 尝试连接服务器sk.send(b‘hello‘)ret = sk.recv(1024) # 对话(发送/接收)print(ret)sk.close() # 关闭客户套接字
View Code

  问题: 重启服务端时可能会遇到,

技术分享图片

解决方法:

# 加入一条socket配置,重用ip和端口.import socketfrom socket import SOL_SOCKET,SO_REUSEADDRsk = socket.socket()sk.setsockopt(SQL_SOCKET,SO_REUSEADDR,1) # 就是它,在bind前加.sk.bind(‘127.0.0.1‘,8000) #把地址绑定到套接字sk.listen() #监听链接conn,addr = sk.accept() #接收客户端链接ret = conn.recv(1024) #接收客户端信息print(ret) # 打印客户端信息conn.send(b‘hi‘) # 向客户端发送信息conn.close() # 关闭客户端套接字sk.close() # 关闭服务器套接字(可选)

python之路-网络编程

评论关闭