系列文章目录
python基础①-基础环境搭建和工具使用python基础②-常用的各种数据类型初认知python基础③-数据类型常用的操作和方法字符串、数值、boolpython基础④-数据类型常用的操作和方法列表、元组、字典、集合python基础⑤-控制流程python基础⑥-函数python基础⑦-字符编码与文件操作python基础⑧-异常python基础⑨-迭代器和生成器python基础⑩-面向对象python基础⑪-继承与派生python基础⑫-多进程python基础⑬-多线程python基础⑭-进程池、线程池、协程python基础⑮-网络编程socketpython基础⑯-网络编程socket进阶
文章目录
- 系列文章目录
- 网络基础
- OSI七层协议(学网络编程最重要的底子)
- socket套接字
- 基于tcp协议的socket通讯
- 服务端
- 客户端
- 思考:
网络基础
- C/S架构
C/S: Client客户端--------基于网络----------Server服务端
你 --------------- 电商 ---------- 商家
有一个地址不固定 有一个地址固定
多个 只有一个(稳定)- 服务端需要遵循的原则:
2.1 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定
2.2 对外一直提供服务,稳定运行(代码保证,操作系统稳定,计算机也稳定)
因为服务端代码运行在操作系统之上,操作系统运行在硬件之上(这就是运维的工作)
2.3 服务端应该支持并发(客服端同时就收服务)- 什么是网络
客户端计算机和服务端计算机通信
网络建立的目的是为数据交互(通信)
如何实现通信:
1. 建立好底层的物理连接介质
2. 有一套统一的通信标准,称之为互联网协议
OSI七层协议(学网络编程最重要的底子)
可以参考这篇文章非常详细
socket套接字
socket是什么
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
在设计模式中,Socket其实就是一个门面模式,
它把复杂的TCP/IP协议族隐藏在Socket接口后面,
对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
基于tcp协议的socket通讯
服务端
import socket
# AF_INET 互联网协议
# SOCK_STREAM TCP流式协议,
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(serverSocket)
# 绑定ip和端口
serverSocket.bind(('127.0.0.1', 8080))
#
# 监听端口。指定限制
serverSocket.listen(5)
print('start')
# io 操作 沿着网络传输数据 读写文件
# 建立三次握手
conn, client_addr = serverSocket.accept()
print(conn)
print(client_addr)
# 收/发消息
# 1024接收的最大字节数bytes
data = conn.recv(1024)
print('收到客户端的数据', data)
# 变大写发送回去
conn.send(data.upper())
# 关闭与客户端建立的连接
conn.close()
# 关闭服务器
serverSocket.close()
客户端
import socket
# AF_INET 互联网协议
# SOCK_STREAM TCP流式协议,
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print(socket)
# 与服务端建立连接,服务端的 ip和端口
socket.connect(('127.0.0.1', 8080))
# 发/收消息
socket.send('hello'.encode('utf-8'))
# 收
data = socket.recv(1024)
print('收到服务端的数据', data)
# 关闭与服务端的链接
socket.close()
先启动服务端,服务端会阻塞,等待客户端的连接请求
然后启动客户端。实现发送和接受消息
思考:
以上的客户端与服务端交互还是有很多问题:
- 虽然服务端能接受5个链接,但是为啥接收了一个就关闭了?
- 如果发送的数据超过1024byte岂不是没法接受?
- 貌似服务端是单线程的串行执行。岂不是没法同时服务多个客户端?
后面的文章会一一解决这样的问题。