罗良夫 张丽
摘要:Python是目前较流行的程序设计语言之一,它具有简单易学代码简洁等特点,并且Python提供了大量的功能库文件,开发大型应用程序时非常方便,广泛用于网站开发、游戏后台开发等方面。该文基于Python提供的网络编程库,开发了网络文件传输的功能,该功能可以快速有效地在互联网上进行文件的传输。
关键词:Python;网络编程;文件传输
中图分类号:TP311.1 文献标识码:A 文章编号:1009-3044(2017)33-0072-02
Abstract: Python is currently one of the more popular programming language, it has the characteristics of easy to learn the code concise, Python provides a number of utility libraries, developing large when the application is very convenient, is widely used in web development, the game background, etc. Based on the network programming library provided by Python, this paper develops the function of network transmission files, which can quickly and effectively transmit files on the Internet.
Key words: Python; network programming; file transfer
1 Python介绍
Python是由Guido van Rossum在1989年底创造的,在1991年发行了第一个公开版本。Python是一种面向对象的、解释型的、动态数据类型的程序设计语言。Python的代码具有很高的可读性,关键词较少且代码结构简洁易懂,在完成同一个任务时,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
Python一般用来完成日常任务,比如自动备份你的MP3等,也可以用来做网站,还可以用来做网络游戏的后台。Python为我们提供了非常完善的各种功能库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。Python开发的过程中,许多功能不必从零编写,直接使用现成的即可。Python的应用十分广泛,比如YouTube、Instagram、国内的豆瓣网站就是用Python开发的,而且许多大公司,包括Google、Yahoo、NASA(美國航空航天局)等都大量地使用Python。
2 Python网络编程介绍
Python网络编程是基于Socket进行开发的,Socket又称"套接字",应用程序通过Socket"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Python 提供了两个级别的网络访问服务:一个是支持基本的 Socket的低级别的网络服务,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法;另一个是高级别的网络服务模块 SocketServer,它提供了服务器的中心类,可以简化网络服务的开发。
3 Python网络编程的常用功能
3.1 建立套接字
服务器与客户在网络通信前需要先建立套接字,具体语法如下:
s=socket.socket(套接字家族, 套接字类型, 网络协议)
3.2 服务器绑定地址
服务器建立套接字后,首先绑定地址到套接字上,具体语法如下:
s.bind(主机名,端口号)
3.3 服务器监听
服务器端绑定地址后,需要监听客户端请求,具体语法如下:
s.listen(最大连接数量)
3.4 服务器接受客户端请求
服务器处于监听状态时,客户端发送请求后需要接受请求,具体语法如下:
s.accept()
3.5 客户端发起连接请求
客户端建立套接字后,需要向服务器端发起连接请求,具体语法如下
s.connect(主机名,端口号)
4 Python网络传输文件功能的设计与实现
Python文件传输功能采用C/S结构,首先对服务器端套接字进行绑定地址监听等操作,然后客户端套接字发起连接请求后,服务器接受请求并获取文件名及大小等信息,然后接受文件数据到指定地址完成传输,如图1所示,具体实现代码如下:
服务器端:
import socket
import time
s=socket.socket()
host=socket.gethostname()
port=3245
s.bind((host,port))
s.listen(5)
while True:
fname=raw_input('请输入文件名:')
file=open(fname,'w')
c,addr=s.accept()
print '客户端连接成功,连接地址:',addr
c.send('服务器连接成功!')
time.sleep(0.2)
len=c.recv(10)
print len
time.sleep(0.5)
len=int(len)
content=c.recv(len)
file.write(content)
file.close()
str=raw_input('是否继续接收文件:(y/n):')
if str.lower()=='y':
c, addr = s.accept() # 建立客户端连接。
else:
Break
客户端:
import socket
import os
import time
s=socket.socket()
host=socket.gethostname()
port=3245
s.connect((host,port))
while True:
print s.recv(1024)
file=open('test.txt','r')
fLen=os.path.getsize('test.txt')
s.send(str(fLen))
content=file.read(fLen)
time.sleep(2)
s.send(content)
file.close()
str=raw_input('是否繼续发送文件:(y/n):')
if str.lower()=='n':
Break
5 结束语
Python语言是目前较流行的程序设计语言之一,它具有语法简洁关键词少等特点,简单易学且功能强大。本文采用Python提供的Socket功能,实现了网络传输文件的功能,该功能实现了通过互联网进行文件传输的功能,理论上文件长度没有限制,且执行的效率较高。
参考文献:
[1] 罗霄, 任勇. 基于Python的混合语言编程及其实现[J].计算机应用与软件, 2004(12):17-18.
[2] 齐鹏. 基于Python的Web数据采集技术[J].电子科技,2012(11):118-120.
[3] 周中华. 基于Python的新浪微博数据爬虫[J].计算机应用, 2014(11):3131-3134.
[4] 邝洪胜.基于Python的电商导购APP设计与实现[D]. 广州: 华南理工大学, 2015(12):62.