zoukankan      html  css  js  c++  java
  • 学习笔记-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. ' *resp* '220 Please use http://ftp.acc.umu.se/ whenever possible.' ***Connected to host ftp.acc.umu.se *cmd* 'USER anonymous' *put* 'USER anonymous ' *get* '331 Please specify the password. ' *resp* '331 Please specify the password.' *cmd* 'PASS **********' *put* 'PASS ********** ' *get* '230 Login successful. ' *resp* '230 Login successful.' ***Logged in as 'anonymouse' *cmd* 'CWD Public/EFLIB' *put* 'CWD Public/EFLIB ' *get* '250 Directory successfully changed. ' *resp* '250 Directory successfully changed.' *** Changed dir to Public/EFLIB *cmd* 'TYPE I' *put* 'TYPE I ' *get* '200 Switching to Binary mode. ' *resp* '200 Switching to Binary mode.' *cmd* 'PASV' *put* 'PASV ' *get* '227 Entering Passive Mode (194,71,11,165,63,139). ' *resp* '227 Entering Passive Mode (194,71,11,165,63,139).' *cmd* 'RETR README' *put* 'RETR README ' *get* '150 Opening BINARY mode data connection for README (6122 bytes). ' *resp* '150 Opening BINARY mode data connection for README (6122 bytes).' *get* '226 Transfer complete. ' *resp* '226 Transfer complete.' *cmd* 'QUIT' *put* 'QUIT ' *get* '221 Goodbye. ' *resp* '221 Goodbye.' '''

    
    
  • 相关阅读:
    Hibernate 笔记 之 三 基础优化方面
    Hibernate 笔记 之 二 查询
    Hibernate 笔记 之 一 创建与配置
    hibernate初次配置及测试
    CentOS 7.3 安装MySQL--Java--Tomcat
    Spring AOP:自动注入参数值
    Spring AOP:实现Request信息获取
    IntelliJ IDEA导出项目文档
    IntelliJ IDEA:Shortcut Key
    iText生成PDF
  • 原文地址:https://www.cnblogs.com/Cloudloong/p/9936399.html
Copyright © 2011-2022 走看看