学习笔记-Python基础20-net编程-UDP、TCP、FTP

# 网络编程
- 网络:网线、电脑、服务器
- 网络协议:一套规则
- 网络模型
- 七层模型(理论模型,七层协议)
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示成
- 应用层
- 四层模型(实际应用)
- 链路层
- 网络层
- 传输层
- 应用层
- 每一层都有相应的协议负责交换信息或者协同工作
- TCP/IP 协议族
- IP地址:负责在网络上唯一定位一个机器
- IP地址分ABCDE类
- 是由四个数字段组成,每个数字段的取值是0-255
- 192.168.xxx.xxx:局域网ip
- 127.0.0.1:本机器
- IPv4, IPv6
- 端口
- 范围:0-65535
- 知名端口:0-1023
- 非知名端口:1024-
# TCP/UDP协议
- UDP:非安全的、不面向连接的传输
- 安全性差
- 大小限制64kb
- 没有顺序
- 速度快
- TCP:基于连接的通信,安全的,速度慢
- SOCKET编程
- socket(套接字):是一个网络通信的端点,能实现不同主机的进程通信,网络大多基于socket通信
- 通过IP+端口定位对方并发送消息的通信机制
- 分为UDP和TCP,即时通信一般用UDP
- 客户端Client:发起访问的一方
- 服务器端Server:接受访问的一方
- UDP编程
- Server端流程
1、建立socket,socket是负责具体通信的一个实例
2、绑定,为创建的socket指定固定的端口和ip地址
3、接受对方发送的内容
4、给对方发送反馈,此步骤为非必须
- Client端流程
1、建立通信的socket
2、发送内容到指定服务器
3、接受服务器给定的反馈内容
- 服务器端案例v01.py
- 客户端案例v02.py

 

- 服务器程序要求永久运行,一般用死循环处理
- 改造的服务器版本v03.py

 


- TCP编程
- 面向链接的传输,即每次传输之前需要先建议一个链接
- 客户端和服务器端两个程序需要编写
- Server端的编写流程
1、建立socket负责具体通信,这个socket其实只负责接收对方的请求
2、绑定端口和地址
3、监听接入的访问socket
4、接受访问的socket,可以理解接受访问即建立了一个通讯的链接通路
5、接受对方的发送内容,利用接收到的socket接收内容
6、如果有必要,给对方发送反馈消息
7、关闭链接通路
案例v04.py
- Client端流程
1、建立通信socket
2、链接对方,请求跟对方建立通路
3、发送内容到对方服务器
4、接受对方的反馈
5、关闭链接通路
案例v05.py

 

# FTP编程
- FTP(FileTransferProtocal)文件传输协议
- 用途:定制一些特殊的上传下载文件的服务
- 用户分类:登陆FTP服务器必须有一个账号
- Real账户:注册账户
- Guest账户:可以临时对某一类人的行为进行授权
- Anonymous账户:匿名账户,允许任何人
- FTP的工作流程
1、客户端链接远程主机上的FTP服务器
2、客户端输入用户名和密码(或者"anonymous"和电子邮件地址)
3、客户端和服务器进行各种文件传输和信息查询操作
4、客户端从远程FTP服务器退出,结束传输
- FTP文件表示
- 分三段表示FTP服务器上的文件
1、HOST:主机地址,类似于ftp.mozilla.org,以ftp开头
2、DIR:目录,表示文件所在本地的路径,例如pub/android/focus
3、File:文件名称,例如Klar-1.1-RC1.apk
- 如果想完整精确的表示ftp上某一个文件,需要上述三部分组合在一起
# FTP案例如下:
import
ftplib import os import socket # 三部分精确表示FTP文件,好多公开的FTP服务器访问会出错或没反应 HOST = "ftp.acc.umu.se" DIR = 'Public/EFLIB' FILE = 'README' # 1、客户端链接远程主机上的FTP服务器 try: f = ftplib.FTP() # 通过设置调试级别可以方便调试 f.set_debuglevel(2) # 链接主机地址 f.connect(HOST) except Exception as e: print(e) exit() print("***Connected to host {0}".format(HOST)) # 2、客户端输入用户名和密码(或者"anonymouse"和电子邮件地址) try: # 登陆如果没有输入用户信息,则默认使用匿名登陆 f.login() except Exception as e: print(e) exit() print("***Logged in as 'anonymouse'") # 3、客户端和服务器进行各种文件传输和信息查询操作 try: # 更改当前目录到指定目录 f.cwd(DIR) except Exception as e: print(e) exit() print("*** Changed dir to {0}".format(DIR)) try: # 从FTP服务器下载文件,第一个参数是ftp命令,第二个参数是回调函数 # 此函数的意思是,执行RETR命令,下载文件到本地后,运行回调函数将内容写入本地README里 f.retrbinary('RETR {0}'.format(FILE), open(FILE, 'wb').write) except Exception as e: print(e) exit() # 4、客户端从远程FTP服务器退出,结束传输 f.quit() ''' 控制台打印输出如下: Connected to pydev debugger (build 182.4129.34) *get* '220 Please use http://ftp.acc.umu.se/ whenever possible.\n' *resp* '220 Please use http://ftp.acc.umu.se/ whenever possible.' ***Connected to host ftp.acc.umu.se *cmd* 'USER anonymous' *put* 'USER anonymous\r\n' *get* '331 Please specify the password.\n' *resp* '331 Please specify the password.' *cmd* 'PASS **********' *put* 'PASS **********\r\n' *get* '230 Login successful.\n' *resp* '230 Login successful.' ***Logged in as 'anonymouse' *cmd* 'CWD Public/EFLIB' *put* 'CWD Public/EFLIB\r\n' *get* '250 Directory successfully changed.\n' *resp* '250 Directory successfully changed.' *** Changed dir to Public/EFLIB *cmd* 'TYPE I' *put* 'TYPE I\r\n' *get* '200 Switching to Binary mode.\n' *resp* '200 Switching to Binary mode.' *cmd* 'PASV' *put* 'PASV\r\n' *get* '227 Entering Passive Mode (194,71,11,165,63,139).\n' *resp* '227 Entering Passive Mode (194,71,11,165,63,139).' *cmd* 'RETR README' *put* 'RETR README\r\n' *get* '150 Opening BINARY mode data connection for README (6122 bytes).\n' *resp* '150 Opening BINARY mode data connection for README (6122 bytes).' *get* '226 Transfer complete.\n' *resp* '226 Transfer complete.' *cmd* 'QUIT' *put* 'QUIT\r\n' *get* '221 Goodbye.\n' *resp* '221 Goodbye.' '''

 

 

转载于:https://www.cnblogs.com/Cloudloong/p/9936399.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值