python之路-网络编程

2021-07-07 17:05

阅读:738

标签:架构   设计   机器   控制   int   网络编程   pen   设计模式   位置   

一. 楔子

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

二. 软件开发的架构:

  第一种: 应用类: 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 socket
sk = socket.socket()
sk.bind((127.0.0.1,8898))  #把地址绑定到套接字
sk.listen()          #监听链接
conn,addr = sk.accept() #接受客户端链接
ret = conn.recv(1024)  #接收客户端信息
print(ret)       #打印客户端信息
conn.send(bhi)        #向客户端发送信息
conn.close()       #关闭客户端套接字
sk.close()        #关闭服务器套接字(可选)
View Code

 client端

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

 

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

技术分享图片

 解决方法:

# 加入一条socket配置,重用ip和端口.
import socket
from socket import SOL_SOCKET,SO_REUSEADDR
sk = 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(bhi) # 向客户端发送信息
conn.close() # 关闭客户端套接字
sk.close() # 关闭服务器套接字(可选)

 

python之路-网络编程

标签:架构   设计   机器   控制   int   网络编程   pen   设计模式   位置   

原文地址:https://www.cnblogs.com/marry215464/p/9588158.html


评论


亲,登录后才可以留言!