python基础⑮-网络编程socket

系列文章目录


python基础①-基础环境搭建和工具使用
python基础②-常用的各种数据类型初认知
python基础③-数据类型常用的操作和方法字符串、数值、bool
python基础④-数据类型常用的操作和方法列表、元组、字典、集合
python基础⑤-控制流程
python基础⑥-函数
python基础⑦-字符编码与文件操作
python基础⑧-异常
python基础⑨-迭代器和生成器
python基础⑩-面向对象
python基础⑪-继承与派生
python基础⑫-多进程
python基础⑬-多线程
python基础⑭-进程池、线程池、协程
python基础⑮-网络编程socket
python基础⑯-网络编程socket进阶

网络基础

  1. C/S架构
    C/S: Client客户端--------基于网络----------Server服务端
    你 --------------- 电商 ---------- 商家
    有一个地址不固定 有一个地址固定
    多个 只有一个(稳定)
  2. 服务端需要遵循的原则:
    2.1 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定
    2.2 对外一直提供服务,稳定运行(代码保证,操作系统稳定,计算机也稳定)
    因为服务端代码运行在操作系统之上,操作系统运行在硬件之上(这就是运维的工作)
    2.3 服务端应该支持并发(客服端同时就收服务)
  3. 什么是网络
    客户端计算机和服务端计算机通信
    网络建立的目的是为数据交互(通信)
    如何实现通信:
    1. 建立好底层的物理连接介质
    2. 有一套统一的通信标准,称之为互联网协议

OSI七层协议(学网络编程最重要的底子)

可以参考这篇文章非常详细
https://blog.csdn.net/qq_39521554/article/details/79894501

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()

先启动服务端,服务端会阻塞,等待客户端的连接请求
然后启动客户端。实现发送和接受消息

服务端输出
客户端输出

思考:

以上的客户端与服务端交互还是有很多问题:

  1. 虽然服务端能接受5个链接,但是为啥接收了一个就关闭了?
  2. 如果发送的数据超过1024byte岂不是没法接受?
  3. 貌似服务端是单线程的串行执行。岂不是没法同时服务多个客户端?

后面的文章会一一解决这样的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七层汉堡王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值