Python全栈学习笔记---网络编程(三)
一、客户端/服务器架构
客户端:因特定需求联系服务器,并发送必要的数据,然后等待服务器响应,最后完成请求或给出故障原因。对服务进行一次性请求。
服务器:一组硬件和软件,为一个或多个客户端服务。存在的唯一目的就是等待客户端请求,并响应然后等待更多请求。服务器无限运行,并不断处理请求
- 硬件客户端/服务器架构,例:打印机服务器、文件服务器
- 软件客户端/服务器架构,例: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全栈学习笔记---网络编程(三)的更多相关文章
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- python全栈学习笔记(三)网络基础之网络设备及架构介绍
- python全栈学习笔记(一)网络基础之网络协议篇
阅读目录 一.操作系统基础 二.网络通信原理 2.1 互联网的本质就是一系列的网络协议 2.2 osi七层协议 2.3 tcp/ip五层模型讲解 2.3.1 物理层 2.3.2 数据链路层 2.3.3 ...
- python全栈学习笔记(二)网络基础之子网划分
阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...
- Python全栈开发-Day8-Socket网络编程
本节内容 断言 Socket构建框架 ftp构建框架 Socket粘包 Socket介绍 Socket参数介绍 基本Socket实例 通过Socket实现简单SSH SocketServer 支持多用 ...
- python全栈学习路线
python全栈学习路线-查询笔记 查询目录 一,硬件 十一,数据 ...
- python 全栈开发笔记 4
反射 1.通过字符串的形式导入模块 2.通过字符串的形式,去模块中寻找指定函数并执行 ''' def f1(): return 'F1' def f2(): return 'F2' ''' #假设上面 ...
- Python全栈day24(面向对象编程作业作业_定义学校老师课程班级学生类)
面向对象作业 作业_定义学校老师课程班级学生类.py #面向对象编程作业,定义学校老师课程班级学生类 #定义几个类,尽可能定义多的数据属性及函数属性 class School: def __init_ ...
- python全栈开发笔记-----------概要
Python开发 开发: 开发语言: 高级语言:python.Java.php .C# .Go .ruby . C++ .... ===>字节码 低级语言:C.汇编 ...
- Java学习笔记-网络编程
Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...
随机推荐
- Python3+Selenium3自动化测试-(七)
在实际定位元素的过程中,发现有一种情况让人很是恼火,根据xpath路径定位,感觉像是没错哦,但是执行时就来一个报错信息--为什么呢? 多表单切换 例如我们登录网易邮箱时就会发现,定位登录框时,一个嵌套 ...
- linux 高效压缩工具之xz的压缩解压使用
xz是什么 高压缩率的工具,它使用 LZMA2 压缩算法,生成的压缩文件比传统使用的 gzip.bzip2 生成的压缩文件更小, 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压 ...
- 双缓冲技术解决MFC绘制闪烁问题
闪烁的根源:OnEraseBkgnd一擦一写造成了图象颜色的反差导致闪烁 如何避免:首先要做的是屏蔽背景刷新.背景刷新其实是在响应WM_ERASEBKGND消息.我们在视类中添加对这个消息的响应 BO ...
- MySQL数据库技术实战
MySQL数据库技术实战 一,安装mysql 很早之前就知道mysql提供了一套数据库样本(github地址),用于测试你的应用程序和数据库服务器. 今天分享下使用过程并将他发布到了码云,以便于同 ...
- python线程池等待全部任务结束再继续
import json import time from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED impor ...
- 算法学习笔记(17): 快速傅里叶变换(FFT)
快速傅里叶变换(FFT) 有趣啊,都已经到NOI的难度了,救命 首先,我们先讲述一下前置知识.已经明白的读者请移步后文 虚数 定义:\(z = a + bi\),其中 \(a, b \in R\ \ ...
- Web自动化测试怎么做呢?好!接下来我们就开始Web网页测试针对性的流程解析啦!!!
前言 测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试. 有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少? 其实,性能的要求比自动化 ...
- StatisticalOutlierRemoval:离群点移除
1.简介 StatisticalOutlierRemoval滤波器主要用于剔除离群点,或则测量误差导致的粗差点. 滤波思想为:对每一个点的邻域进行一个统计分析,计算它到所有临*点的*均距离.假设得到的 ...
- 树莓派开机启动VNC
sudo nano /etc/init.d/vncserver #!/bin/sh ### BEGIN INIT INFO # Provides: vncserver # Required-Start ...
- Spring(Spring的读取外部资源- p 命名空间)
Spring读取外部资源 实际开发中,数据库的资源一般会单独保存起来.一般会保存到后缀为properties的文件中,方便维护和修改,如果Spring加载资源,就需要在spring.xml中读取pro ...