Python:利用Socket实现文件传输服务

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
Python:利用Socket实现文件传输服务

Python 提供了两个级别访问的网络服务:

  • 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
  • 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。

本次就来演示一下利用Socket做一个文件上传服务程序

代码如下:

  • srever端代码
Python:利用Socket实现文件传输服务


  • client端代码
Python:利用Socket实现文件传输服务


  • s.bind() 绑定地址(host, port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址
  • s.listen() 开始TCP监听,backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为0,大部分应用程序设为5就可以了
  • s.connect() 主动初始化TCP服务器连接。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误
  • s.recv() 接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略
  • s.sendall() 完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常
  • 由于每次发送的数据都有大小限制,因此srever端和client端都分别用了循环接收和循环发送,中止循环条件为发送数据总数或接收数据总数等于文件大小

ps:必须要一收一发,无论哪一端,一个发送数据另一个就必须要收才能正常运行

运行效果如下:

Python:利用Socket实现文件传输服务

ps:命令 post|test.mp4 为把当前目录下的test.mp4 文件上传,传输完成后文件将保存到当前路径下的data目录,没有的话自行创建一下

作者也在学习当中,难免会有错漏的地方,恳请读者能给予意见或建议,谢谢!转载请注明:[learnaLanguage_YiZhou_Python:利用Socket实现文件传输服务]


分享到:


相關文章: