Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程
1.OSI七层协议
2.基于tcp协议的套接字通信
3.模拟ssh远程执行命令
4.tcp的粘包问题及解决方案
5.基于udp协议的套接字通信
6.socketserver
目标:开发一个C/S架构的软件
C/S:客户端----》server
B/S:浏览器----》server
server端:
1.位置必须固定/绑定一个固定的地址
2.对外一直提供服务,稳定运行
3.支持并发(让多个客户端感觉时被同时服务)
网络:
物理连接介质+互联网协议
ip+port可以标识全世界范围内独一无二的应用软件(基于网络通信协议)
任何的数据报应该分为报头+数据部分。其中报头是用来描述数据的,报头的长度是固定的
#client
import socket
#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM
#2.拨号
phone.connect(('127.0.0.1',8080)) #ip和端口应该是服务的IP和端口
#3.发收消息
while True:
msg=input('Please input send msg:').strip()
phone.send(msg.encode('utf-8')) #必须是bytes类型 data=phone.recv(1024)
print('服务端消息',data)
#Server
import socket
#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM
#2.插SIM卡
phone.bind(('127.0.0.1',8080)) #ip 应该是服务端该软件运行机器的IP地址,port(最好1024-65535)
#3.开机
phone.listen(5) #半连接池限制的是同一时刻的请求数
print('服务端启动。。。')
#4.等待电话连接的请求
conn,client_addr=phone.accept() #(套接字对象,存放客户端IP和端口的元组)
print('====>')
print(conn,client_addr)
#5.收发消息
while True:
data=conn.recv(1024) #1024单位是bytes, 代表最大接收1024 bytes
print('收到消息',data)
conn.send(data.upper())
#6.挂电话
conn.close()
#conn.send()
#7关机
phone.close()
输出:
服务端启动。。。
#异常是程序发生错误的信号,一旦程序出错
try:
l=[1,2,3]
#if 100< len(l):
l[100]
print('aa')
except IndexError:
print('索引超出范围')
print('other code')
输出:
索引超出范围
other code
#client优化
import socket
#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM
#2.拨号
phone.connect(('127.0.0.1',8080)) #ip和端口应该是服务的IP和端口
#3.发收消息
while True:
msg=input('Please input send msg:').strip()
phone.send(msg.encode('utf-8')) #必须是bytes类型 data=phone.recv(1024)
print('服务端消息',data)
#server 优化
import socket
#1.买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp 流式=>SOCK_STREAM
#2.插SIM卡
phone.bind(('127.0.0.1',8080)) #ip 应该是服务端该软件运行机器的IP地址,port(最好1024-65535)
#3.开机
phone.listen(5) #半连接池限制的是同一时刻的请求数
print('服务端启动。。。')
#4.等待电话连接的请求
conn,client_addr=phone.accept() #(套接字对象,存放客户端IP和端口的元组)
print('====>')
print(conn,client_addr)
#5.收发消息
while True:
try:
data=conn.recv(1024) #1024单位是bytes, 代表最大接收1024 bytes
if len(data) == 0:break # for linux/MAC
print('收到消息',data)
conn.send(data.upper())
except ConnectionResetError: # for windows
break
#6.挂电话
conn.close()
#conn.send()
#7关机
phone.close()
import os
res=os.system('dir')
print('结果',res)
输出:
结果 0
import subprocess
import time
obj=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#print (obj)
stdout=obj.stdout.read() print(stdout.decode('gbk'))
stdout=obj.stdout.read()
time.sleep(0.1)
输出:
驱动器 C 中的卷是 OS
卷的序列号是 E0C1-2532
C:\Users\andy 的目录
2018/08/26 17:40 <DIR> .
2018/08/26 17:40 <DIR> ..
2018/03/20 22:28 <DIR> .anaconda
2017/07/29 20:27 <DIR> .android
2018/05/25 22:20 <DIR> .astropy
2018/03/21 00:17 <DIR> .conda
2018/05/05 21:53 43 .condarc
2018/08/26 09:37 <DIR> .ipynb_checkpoints
2018/03/20 22:27 <DIR> .ipython
2018/05/06 17:59 <DIR> .jupyter
2018/05/25 22:15 <DIR> .PyCharm2016.2
2018/08/16 23:10 <DIR> 3D Objects
2018/08/05 14:44 43 a.txt
2018/03/20 22:15 <DIR> Anaconda2
2018/05/06 16:12 <DIR> Anaconda3
2018/05/05 21:53 <DIR> AnacondaProjects
2018/08/05 15:21 63 b.json
2018/08/05 15:21 63 c.json
2018/08/16 23:10 <DIR> Contacts
2018/07/29 22:32 23,933 Day06.ipynb
import struct
#可以将整形打包成固定长度的bytes类型,可以基于网络传输
res=struct.pack('i',21215)
print(res,len(res)) res1=struct.unpack('i',res)
print(res1[0])
输出:
b'\xdfR\x00\x00' 4
21215
Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver的更多相关文章
- 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议
Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...
- Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: ...
- 网络编程-osi七层
一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...
- 软件开发架构与网络之OSI七层协议(五层)
本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...
- 网络之OSI七层协议模型、TCP/IP四层模型
13.OSI七层模型各层分别有哪些协议及它们的功能 在互联网中实际使用的是TCP/IP参考模型.实际存在的协议主要包括在:物理层.数据链路层.网络层.传输层和应用层.各协议也分别对应这5个层次而已. ...
- day28——C/S与B/S架构、网络通信原理、osi七层协议、UDP、TCP协议、TCP的三次握手与四次挥手
day28 C/S B/S架构 C:client 客户端 B:browse浏览器 S:server 服务端 C/S C/S架构:基于客户端与服务端之间的通信 QQ.游戏.皮皮虾 优点:个性化设 ...
- python网络编程-OSI七层模型详解
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
- Java网络编程:OSI七层模型和TCP/IP模型介绍
OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...
- CSIC_716_20191204【网络编程 OSI 七层结构】
软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...
随机推荐
- Uboot的串口下载文件命令:loads / loadb / loady
1. loads loads [ off ] 通过串口,下载S-Rec文件到off位置 loads命令可以通过串口线下载S-Record格式文件. 2. loadb loadb [ off ] [ b ...
- PHP中输出文件,怎么区别什么时候该用readfile() , fread(), file_get_contents(), fgets()
我在服务器端(Apache环境)上放了一个安卓apk安装包的下载链接,使用readfile()读取apk文件输出下载后,手机安装apk显示解析包错误.但apk本身没问题,下载后文件的大小也是完整的.服 ...
- ip获取位置
$ip = $_SERVER["REMOTE_ADDR"]; $url = "http://ip.taobao.com/service/getIpInfo.php?ip= ...
- 深入Asyncio(八)异步迭代器
Async Iterators: async for 除了async def和await语法外,还有一些其它的语法,本章学习异步版的for循环与迭代器,不难理解,普通迭代器是通过__iter__和__ ...
- Unity3D研究院之拓展Scene视图
Scene视图是编辑游戏模型的地方,其实它还可以进行编辑.如下图所示,我给Scene视图做了简单的编辑. Scene视图的拓展是基于对象的,意思就是你必须在Hierarchy视图中选择一个对象才行.H ...
- AOS应用基础平台-模块开发流程
AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...
- iOS开发 viewWillAppear:(BOOL)animated真机调试的时候不执行了怎么办
本文转载至http://blog.sina.com.cn/s/blog_a843a8850101e0g7.html 现在需要的.h文件里面加上. 然后,在需要的.m文件按里面加上关键代码:self ...
- PHP部分--图片上传服务器、图片路径存入数据库,并读取
html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- virtual dynamic shared object
vdso(7) - Linux manual page http://man7.org/linux/man-pages/man7/vdso.7.html NAME | SYNOPSIS | DESCR ...
- 1000个圆点与PaintDC的使用,OnSize时重画很棒
import wx import random class View(wx.Panel): def __init__(self, parent): super(View, self).__init__ ...