今日内容: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的更多相关文章

  1. 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议

    Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...

  2. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  3. 网络编程-osi七层

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  4. 软件开发架构与网络之OSI七层协议(五层)

    本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...

  5. 网络之OSI七层协议模型、TCP/IP四层模型

    13.OSI七层模型各层分别有哪些协议及它们的功能 在互联网中实际使用的是TCP/IP参考模型.实际存在的协议主要包括在:物理层.数据链路层.网络层.传输层和应用层.各协议也分别对应这5个层次而已. ...

  6. 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.游戏.皮皮虾 ​ 优点:个性化设 ...

  7. python网络编程-OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  8. Java网络编程:OSI七层模型和TCP/IP模型介绍

    OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...

  9. CSIC_716_20191204【网络编程 OSI 七层结构】

     软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...

随机推荐

  1. gitlab多人协同工作

    gitlab多人协同工作 本文为亨利向<Git权威指南>的作者蒋鑫老师的答疑邮件写成. 这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答. 蒋鑫老师的细致专业的解答让我 ...

  2. nginx - KeepAlive详细解释

    最近工作中遇到一个问题,想把它记录下来,场景是这样的: 从上图可以看出,用户通过Client访问的是LVS的VIP, VIP后端挂载的RealServer是Nginx服务器. Client可以是浏览器 ...

  3. 必会必知git

    git必会必知   1 前言 git前身是BitKeeper,但是他不是开源软件,不符合当时开源趋势,于是就会有了开源的git,git开发只用了十天时间.目前git是公司开发必不可少的一个工具,用于多 ...

  4. 小程序踩坑之不同屏幕下动态改变translate值

    案例还原 小程序做一个进度条,可以通过拽转控制进度 那么肯定有一个进度条,不过小程序自己会做适配宽高 6s下这个div的width 是250 6splus就是276 但是问题来了,我拖拽用的是tran ...

  5. 图像处理之log---log算子

    在图像中,边缘可以看做是位于一阶导数较大的像素处,因此,我们可以求图像的一阶导数来确定图像的边缘,像sobel算子等一系列算子都是基于这个思想的. 但是这存在几个问题:1. 噪声的影响,在噪声点处一阶 ...

  6. python使用模板手记

    1.首先是$符号 在webpy中,模板html里面可以写python代码,但要用$开始.但如果网页代码本来就有$符号(javascript或者正则表达式),我们需要对其进行转意.用$$代替$ 给jqu ...

  7. python 基础 6.2 raise 关键字使用

    一. raise 关键字    raise 用来触发异常    语法如下:     raise[Exception [,args [,traceback]]]     语句中Exception 是异常 ...

  8. Java 学习 day04

    17-数组(概述-内存结构) 概念:同一种类型数据的集合,其实数组就是一个容器. 可以自动给数组中的元素从0开始编号,方便操作这些元素. int[] x = new int[3]; 01-数组(静态初 ...

  9. Tomcat Server 配置

    Tomcat报错: The JRE could not be found. Edit the server and change the JRE location. EClipse -> win ...

  10. C# 自定义控件制作和使用实例(winform)(转)

    本例是制作一个简单的自定义控件,然后用一个简单的测试程序,对于初学者来说,本例子比较简单,只能起到抛石引玉的效果. 我也是在学习当中,今后会将自己所学的逐步写出来和大家交流共享.   第一步:新建一个 ...