一、客户端/服务器架构

客户端:因特定需求联系服务器,并发送必要的数据,然后等待服务器响应,最后完成请求或给出故障原因。对服务进行一次性请求。

服务器:一组硬件和软件,为一个或多个客户端服务。存在的唯一目的就是等待客户端请求,并响应然后等待更多请求。服务器无限运行,并不断处理请求

  • 硬件客户端/服务器架构,例:打印机服务器、文件服务器
  • 软件客户端/服务器架构,例:Web服务器、数据库服务器、窗体服务器

二、套接字(socket):通信端点,监听请求

套接字地址:(主机名,端口号)

UDP:成本低廉,不需大量的维护,例如:使用面向连接的协议

1、socket模块函数

创建套接字

1 import socket
2 tco_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

缩短代码:

1 from socket import * #将socket模块引入命名空间
2 tco_socket = socket(AF_INET, SOCK_STREAM)
3 udp_socket = socket(AF_INET, SOCK_DGRAM)

1.1、套接字的内置方法:

 1.2、创建TCP服务器/客户端

1.2.1、创建TCP服务器

 1 '''
2 创建TCP服务器,创建TCP服务器,接受客户端发送的字符串,并将其打上时间戳并返回给客户端
3 '''
4 from socket import *
5 from time import ctime
6
7 HOST = '' #主机名
8 PORT = 21567 #端口号
9 BUF_SIZE = 1024 #缓冲区大小
10 ADDR = (HOST, PORT)
11
12 tcp_sersock = socket(AF_INET, SOCK_STREAM)
13 tcp_sersock.bind(ADDR) #套接字绑定服务器地址
14 tcp_sersock.listen(5) #传入连接请求的最大数
15 try:
16 while True:
17 print('Waiting for connection...')
18 tcp_clisock, addr = tcp_sersock.accept() #接受客户端连接,返回客户端套接字,空出原始服务器套接字,使其可等待其它客户端请求
19 print('...connected from:', addr)
20
21 while True:
22 data = tcp_clisock.recv(BUF_SIZE).decode() #客户端套接字接受TCP消息,当一方关闭连接或向对方发送一个空字符串,连接关闭
23 if not data:
24 break
25 tcp_clisock.send(('[%s] %s ' % (ctime(), data)).encode())
26 tcp_clisock.close() #关闭临时客户端套接字
27 except ValueError: #传入一个调用者不期望的值,即使值的类型是正确的
28 tcp_sersock.close() #关闭服务端套接字,但一般服务器应无限循环运行,若服务器要实现智能退出方案,建议使用close()

注:

  • 若支持IPv6,创建套接字时为AF_INET6
  • 优雅地退出和调用服务器close()方法,使用try-except方法

 1.2.2、创建TCP客户端

'''
创建TCP客户端, 连接到服务器,并以逐行数据的形式提示用户,服务器则返回加入时间戳的相同诗句,并通过客户端展示给用户
'''
from socket import * HOST = 'localhost' #服务器主机名 or'127.0.0.1 '
PORT = 21567 #服务器端口号
BUF_SIZE = 1024 #缓冲区大小
ADDR = (HOST, PORT) tcp_clisock = socket(AF_INET, SOCK_STREAM)
tcp_clisock.connect(ADDR) #创建到服务器的连接 while True:
data = input('>')
if not data:
break
tcp_clisock.send(data.encode())
data = tcp_clisock.recv(BUF_SIZE).decode()
if not data:
break
print(data)
tcp_clisock.close()

注:注意编码方式的转换

1.2.3、 执行TCP服务器和客户端

先执行服务器再执行客户端,若修改主机名则服务器在其他电脑上运行

>>>服务器端:
Waiting for connection...
...connected from: ('127.0.0.1', 45529)
>>>客户端:

>lll
[Sun Mar 4 16:27:47 2018] lll

1.3、创建UDP服务器和客户端

1.3.1、创建UDP服务器

 1 '''
2 创建UDP服务器,接受客户端发来的消息,并加入时间戳前缀的该消息返回给客户端
3 '''
4
5 from socket import *
6 from time import ctime
7
8 HOST = ''
9 PORT = 21567
10 BUF_SIZE = 1024
11 ADDR = (HOST, PORT)
12
13 udp_sersock = socket(AF_INET, SOCK_DGRAM)
14 udp_sersock.bind(ADDR)
15 try:
16 while True:
17 print('Waiting for message...')
18 data, addr = udp_sersock.recvfrom(BUF_SIZE)
19
20 udp_sersock.sendto(('[%s] %s ' % (ctime(), data.decode())).encode(), addr)
21 print('...received from and returned to:', addr)
22 except ValueError:
23 udp_sersock.close()

 1.3.2创建UDP客户端

 1 '''
2 创建UDP客户端,提示用户输入发送到服务器的消息,并接受服务器加入时间戳的消息,然后显示给用户
3 '''
4
5 from socket import *
6
7 HOST = 'localhost'
8 PORT = 21567
9 BUF_SIZE = 2014
10 ADDR = (HOST, PORT)
11
12 upd_clisock = socket(AF_INET, SOCK_DGRAM)
13
14 while True:
15 data = input('>')
16 if not data:
17 break
18 upd_clisock.sendto(data.encode(), ADDR)
19 data, ADDR = upd_clisock.recvfrom(BUF_SIZE)
20 if not data:
21 break
22 print(data.decode())
23 upd_clisock.close()

Python全栈学习笔记---网络编程(三)的更多相关文章

  1. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  2. python全栈学习笔记(三)网络基础之网络设备及架构介绍

       

  3. python全栈学习笔记(一)网络基础之网络协议篇

    阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...

  4. python全栈学习笔记(二)网络基础之子网划分

    阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...

  5. Python全栈开发-Day8-Socket网络编程

    本节内容 断言 Socket构建框架 ftp构建框架 Socket粘包 Socket介绍 Socket参数介绍 基本Socket实例 通过Socket实现简单SSH SocketServer 支持多用 ...

  6. python全栈学习路线

    python全栈学习路线-查询笔记 查询目录 一,硬件                                                                    十一,数据 ...

  7. python 全栈开发笔记 4

    反射 1.通过字符串的形式导入模块 2.通过字符串的形式,去模块中寻找指定函数并执行 ''' def f1(): return 'F1' def f2(): return 'F2' ''' #假设上面 ...

  8. Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)

    面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...

  9. python全栈开发笔记-----------概要

    Python开发 开发: 开发语言: 高级语言:python.Java.php  .C#   .Go .ruby . C++ .... ===>字节码 低级语言:C.汇编            ...

  10. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

随机推荐

  1. css边框,盒子模型、浮动、定位

    边框,盒子模型.浮动.定位 一.边框 border-width : 边框宽度 border-style : 边框样式 1.solid 实线 2.none 无边框 3.dotted 点状虚线边框 4.d ...

  2. Grafana 系列文章(五):Grafana Explore 查询管理

    ️URL: https://grafana.com/docs/grafana/latest/explore/query-management/ Description: Explore 中的查询管理 ...

  3. drf-drf请求、响应、基于GenericAPIView+5个视图扩展类

    1.反序列化类校验部分源码分析(了解) 1.当我们在视图类中生成一个序列化类对象ser,并且用ser.is_valid()是就会执行校验,校验通过返回True,不通过返回False.首先对象ser和序 ...

  4. 构建api gateway之 如何给openresty打patch

    如何给openresty打patch 由于很多功能实现的限制,我们不得不修改openresty,但我们又不一定能持续维护一个 openresty 分支,所有有了patch 这一操作. patch是怎么 ...

  5. Vue31 消息订阅和发布

    1 简介 组件之间的通信除了使用事件总线之外,还可以使用一些插件来通过消息的订阅和发布来实现.pubsub-js就是一个不错的选择. 2 使用 2.1 安装 npm i pubsub-js # 或 y ...

  6. ASP.NET Core - .NET 6 的入口文件

    自从.NET 6 开始,微软对应用的入口文件进行了调整,移除了 Main 方法和 Startup 文件,使用顶级语句的写法,将应用初始化的相关配置和操作全部集中在 Program.cs 文件中,如下: ...

  7. VeryCapture V1.8.9.5 中文版安装使用教程

    VeryCapture简介 VeryCapture中文版是一款实用的屏幕捕捉工具.VeryCapture最新版持将图钉在桌面.这个功能可以方便图片对比,在写论文或者写文章时比较方便.VeryCaptu ...

  8. 亲测有效 Hyper V3.4.0 终端美化工具 支持win/mac

    亲测有效 Hyper V3.4.0 终端美化工具 支持win/mac Hyper 是一款终端美化工具 基于Web技术,JS/HTML/CSS ,支持扩展增强,很不错! 且支持win,mac 下载地址 ...

  9. 树莓派4B安装OPENCV4.0

    参考 : https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/ Step #1: Expand ...

  10. VMwarestation安装centos系统

    上机实验1 1.软硬件准备 软件:推荐使用vmware 镜像:centos7下载网址https://mirror.iscas.ac.cn/centos/7/isos/x86_64/ 这个镜像网址实测比 ...