一、客户端/服务器架构

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

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

  • 硬件客户端/服务器架构,例:打印机服务器、文件服务器
  • 软件客户端/服务器架构,例: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. HelloWorld的常见问题与Notepad++使用-程序注释与Hello World说明

    HelloWorld的常见问题与Notepad++使用 编译和运行是两回事 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中, javac 编译器会检查我们 所写的程 ...

  2. docker搭建maven私服(nexus3),整合springboot上传下载依赖

    一.前言 我们在JavaWeb开发中必不可少的就是jar包管理-maven,在没有maven之前,都是自己手动下载jar包导入到项目中,非常的繁琐. maven出现之后,又迎来新的问题,对于仓库里人家 ...

  3. Pytest插件之pytest-base-url切换测试环境

    Pytest插件之pytest-base-url切换测试环境 安装  pip install pytest-base-url 应用场景 利用参数--base-url或者配置(pytest.ini中ba ...

  4. supervisor管理java进程

    安装 yum install supervisor 设置开机启动 systemctl enable supervisord 启动supervisord systemctl start supervis ...

  5. java执行js脚本

    @Test public void aa() throws NoSuchMethodException { String regular = "function regular(args1) ...

  6. CentOS7登录到控制台后无网络

    1.找到网卡配置文件 ll /etc/sysconfig/network-scripts/ | grep ifcfg-en 2.编辑配置文件开启系统启动时自动启动网络,并保存文件 vi /etc/sy ...

  7. javaEE(多线程、线程通信、线程安全、线程池、线程池工具)

    多线程 多线程的创建 Thread类的方法 线程安全.线程同步 线程通信.线程池 定时器.线程状态.. Thread类 java是通过java.lang.Thread类来代表线程的 按照面向对象的思想 ...

  8. 安卓逆向.5 xposed 替换方法-(实战贪吃蛇)

    代码剖析 调用成功方法 获取类 方法写入 实战例子(贪吃蛇)

  9. bat脚本登陆ftp服务器

    用bat脚本登录ftp服务器,下载指定文件. 第一次脚本,有问题,你发现了么? 由于每个">>"重定向符号之前都习惯用空格(python style),导致写道ftp. ...

  10. PostGIS之线性参考

    1. 概述 PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询 PostGIS官网:About PostGIS | PostGIS ...