一、客户端/服务器架构

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

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

  • 硬件客户端/服务器架构,例:打印机服务器、文件服务器
  • 软件客户端/服务器架构,例: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. java跨域问题解决

    问题描述:在使用前后端分离的情况下,前端访问后端时会出现跨域问题 解决方式: 1.设置跨域 1).单个控制器方法CORS注解 在单个方法中加入注解@CrossOrigin. 2).整个控制器启用COR ...

  2. 11月28日内容总结——多表查询的两种方法及部分小知识点、可视化软件Navicat安装及简单使用讲解及多表查询练习题、python代码操作MySQL(pymysql模块)

    目录 一.多表查询的两种方法 方式1:连表操作 inner join(内连接) left join(左连接) right join(右连接) union(全连接) 方式2:子查询 二.小知识点补充说明 ...

  3. Vue27 scoped样式

    https://www.jianshu.com/p/d80383251fc5 1 简介 当我们在组件中写样式,vue最后会把所有样式合在一起,如果样式名称重复的话就会有问题 style标签上加scop ...

  4. 对List集合进行分页

    1 简要说明 有时候,我们有一个list集合,需要对它进行分页处理 下面的根据类MyPageUtilVo就可以做到 它自带泛型,适合各种集合 可以设置每页的大小(默认为10) 根据页码(从1开始)就可 ...

  5. ubuntu卸载eigen

    1.sudo updatedb 2.locate eigen3 3.手动删除

  6. LoginServlet类

    import cn.itcast.dao.UserDao; import cn.itcast.domain.User; import javax.servlet.ServletException; i ...

  7. Spring(AOP的认识、实现)

    2:Spring AOP AOP (Aspect Oriented Programming) 面向切面编程 OOP(Object Oriented Programming)面向对象编程,用对象的思想来 ...

  8. CodeArts Snap:辅助你编程的神器

    摘要:通过将自然语言转化为规范可阅读.无开源漏洞的安全编程语言,提升开发者编程效率,助力企业快速响应市场需求. 本文分享自华为云社区<华为云发布智能编程助手 CodeArts Snap!> ...

  9. Postgresql模板数据库之template1 和 template0

    一.简介 template1和template0是PostgreSQL的模板数据库.所谓模板数据库就是创建新database时,PostgreSQL会基于模板数据库制作一份副本,其中会包含所有的数据库 ...

  10. LeetCode-798 得分最高的最小论调 及差分和前缀和的学习

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/smallest-rotation-with-highest-score 题目描述 给你一个数组  ...