网络编程
-
网络:
-
网络协议:一套规则
-
网络模型七层模型-七层 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层四层模型 链路层 网络层 传输层 应用层
-
每一层都有相应的协议负责交换信息或者协同工作
-
TCP/IP协议 协议族
-
IP地址:负责网络上唯一定位一个机器IP地址分5类3点4段式,每个字段是0~255127.0.0.1:本机IPV4 IPV6
-
端口号范围:0-65535 知名端口:0——1023已经知名的端口 非知名端口:1024->
TCP/UDP 协议
-
UDP:非安全的不面向链接的传输
-
安全性差
-
大小限制64kb
-
没有顺序
-
速度快
-
-
TCP
-
基于链接的通讯
-
-
SOCKET编程
-
socket(套接字):这是一个网络通讯的端点,实现不同主机的进程通讯
-
通过IP+端口定位对方并发送信息的通信机制
-
分为UDP和TC P
-
-
UDP 编程Server端流程
-
1.建立socket.socket是负责具体通讯的一个实例
-
2.绑定,为创建socket指派固定的端口和IP地址
-
3.接受对方发送的内容
-
4.给对方发送反馈,
-
此步骤为非必需步骤Client端流程:
-
1.建立通讯的socket
-
2.发送内容到指定服务器 3
-
.接受服务器的反馈信息
-
服务端案例V01
-
import socket def serverFunc(): #AF_INET使用IPv4协议 SOCK_DGRAM使用UDP协议 soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #绑定IP和端口号 addr = ('127.0.0.1',10089) soc.bind(addr) #接受访问 data,addr = sco.recvfrom(500) print(data) #需要将数据进行解码才可以进行读取 data = data.deconde() print(data) #给对方的反馈信息 res = '反馈信息' #将数据进行编码发送 res = res.encode() soc.sendto(res,addr) if __name__ == "__main__": print('Start Server...') serverFunc() print('End Server.....')
-
客户端案例V02
-
import socket def clientFunc(): soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) text = '来自客户端的访问' data = text.encode() soc.sendto(data,('127.0.0.1',10089)) data,addr = socket.recvfrom(200) data = data.decode() print(data) if __name__ == '__main__': print("client...") clientFunc() print("end client...")
-
服务器要求永久运行案例V03
import socket import time def serverFunc(): soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) addr = ('127.0.0.1',10089) soc.bind(addr) data,addr = soc.recvfrom(500) data = data.decode() print(data) res = '来自服务器的反馈信息' res = res.encode() soc.sendto(res,addr) if __name__ == '__main__': print('Start Server..') while True: try: serverFunc() except Exceptiom as e: print(e) time.sleep(1) print('end Server...')
-
-
-
-
TCP编程
-
面向链接传输,及每次传输之前需要建立连接
-
客户端和服务端俩个程序需要编写
-
Server端的编写流程:
-
1.建立socket负责具体通信,这个socket其实只负责接受对方的请求
-
2.绑定端口号和地址
-
3.监听接入的访问socket
-
4.接受访问的socket,可以理解接受访问即建立了一个通讯的连接.
-
5.接受对方的发送内容,利用接收到的socket接收内容
-
6.如过有必要,给对方发送反馈信息
-
7.关闭链接
-
#导入包 import socket def TCP_Server(): #AF_INET使用IPV4协议,SOC_STREAM使用TCP soc = socket.socket(socket.AF_INET,sockey.SOC_STREAM) addr = ('127.0.0.1',10089) #绑定地址和端口号 soc.bind(addr) #监听网络 soc.listen() while True: #返回值为内容和链接地址 skt,addr = soc.accept() msg = skt.recv(500) data = msg.decode() rest = "recvide msg : {0} from {1}".formate(data,addr) print(rest) skt.send(rest.encode()) skt.close() if __name__ == "__main__": print("Start Server...") TCP_Server()
-
-
Client 端流程:
-
1.建立通信的socket
-
2.链接对方,请求跟对方远程链接
-
3.发送内容到对方服务器
-
4.接受对方的反馈
-
5.关闭链路的接通案例V04 V05
-
import socket def TCP_Clinet(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) addr = ('127.0.0.1',10089) scok.bind(addr) msg = "这是一跳客户端的信息" sock.send(msg.encode) res = sock.recv(500) print(res.decode) sock.close() if __name__ == "__main__": TCP_Client()
-
-
-
FTP编程
-
FTP(FileTransferProtocal)文件传输协议
-
用途:定制一些特殊的上穿下载文件的服务
-
用户分类:登陆FTP服务器需要一个账号
-
Real:账户
-
Guest:可对临时对某一类人的行为进行授权
-
Anonymous:匿名账户,允许任何人。
-
-
-
FTP工作流程
-
客户端链接远程主机上的FTP服务器
-
客户端输入用户名和密码(或者“anonymous”和电子邮件地址)
-
客户端和服务器进行各种文件传输和信息查询操作
-
客户端从远端服务器FTP退出,结束传输
-
-
FTP文件的表示
-
分三段表示FTP服务器上的文件
-
HOST:主机地址,类似于ftp.mozilla.org,以FTP开头
-
DIR:目录表示文件所在本地的路径
-
File:文件名称
-
如果想要完整精确表示ftp上某一个文件,需要上述三部分组合在一起。-案例V06
-
#对应的包的导入 import ftplib import os import socket #三步表示精确的ftp服务器上的某一个文件 HOST = 'ftp.acc.umu.se' DIR = 'Public/EFLIB/' FILE = 'README' #远程链接FTP服务器 try: f = ftplib.FTP() f.set_debuglevel(2) f,connect(HOST) except Exception as e: print(e) exit() print("******Connect to hsot {0}".formate(HOST)) #登陆服务器 try: f.login() except Expetion as e: print(e) exit() print("login in sa 'anonymouse'") #登陆成功后更改当前目录 try: f.cwd(DIR) except Exception as e: print(e) exit() print("***change dir to {0}".formate(DIR)) #切换目录之后下载对应得文件 try: #从FTP上下载文件 #第一个参数是FTP命令 #第二个参数是回调函数 #这个函数得指,执行RETR命令,下载文件到本地后,运行得回调函数 f.retrbinary('RETR {0}'.formate(FILE),open(FILE,"wb").write) except Exception as e: print(e) exit() #链接退出 f.quit()
-