详解如何用python实现一个简单下载器的服务端和客户端


Posted in Python onOctober 28, 2019

话不多说,先看代码:

客户端:

import socket
def main():
  #creat:
  download_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  #link:
  serv_ip=input("please input server IP")
  serv_port=int(input(("please input server port")))
  serv_addr=(serv_ip,serv_port)
  download_client.connect(serv_addr)
  #send and receive
  filename=input("please input filename")
  download_client.send(filename.encode("utf-8"))
  download_data=download_client.recv(1024)
  if download_data:
    with open("receive_"+filename,"wb") as f:
      f.write(download_data)
  download_client.close()
if __name__ == '__main__':
  main()

服务器:

import socket
def send_data(server_socket):
  while True:
    filename = server_socket.recv(1024).decode("utf-8")
    print("用户请求下载对象是%s"%filename)
    if filename:
      with open(filename, "rb") as f:
        file_data = f.read()
        server_socket.send(file_data)
    else:
      server_socket.close()
      break
def main():
  #creat
  server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  #bind
  server.bind(("",4399))
  #listen
  server.listen(128)
  #accept
  while True:
    print("waiting for quest")
    server_socket,client_ip=server.accept()
    print("connected")
    send_data(server_socket)
  #close
  server.close()
if __name__ == '__main__':
  main()

前几天有写一个基于UDP的简单程序,今天学习了TCP,TCP与UDP 的区别与联系其实已经写得很清楚了,这里不再多说。今天使用的TCP,在文件下载方面应用更加广泛(可靠)。客户端分析:

1.注意到TCP协议是面向连接的,也就是每一个TCP,从客户端发送请求,需要与服务器建立一个连接(UDP不用)。所以这一点体现在程序中就有了一个connect动作

2.目前程序recv方法仅支持1kb,收发大文件会出错,这点在我之后搞清楚大文件下载再说

服务器分析:

1.服务器是需要绑定的,也就是需要把他的地址定下来,这样客户端才会知道每次要和谁建立链接。

2.socket之listen,之前的网络链接我们都是主动的去连接别人,如connect(),服务器是不需要连接别人的,所以他是一个被动连接,等着别人来连接他。listen就是拿来转换的。后面的参数是参数指定队列中最多可容纳的等待接受的传入连接数。若要确定可指定的最大连接数,要参照 MaxConnections 值。也就是等着连接的最大数。

3.accept()返回参数是一个元组,前面我们就用两个变量对他进行拆包了,第一个是一个socket对象,第二个是连接本服务器的地址。对于这个新的socket对象可以理解为服务器主socket接到连接后派遣了一个专员socket来对这个客户端进行服务。

4.一个服务器可以被多个客户端连接,每个客户端都会被分配一个专员进行服务。

总结:

客户端流程:创建套接字(可绑定)—连接服务器—收发—关闭
服务器流程:创建套接字—绑定—监听连接—接收连接—收发—关闭

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
python将一组数分成每3个一组的实例
Nov 14 Python
python如何查看微信消息撤回
Nov 27 Python
python爬取指定微信公众号文章
Dec 20 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
解决python中导入win32com.client出错的问题
Jul 26 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
tensorflow如何批量读取图片
Aug 29 Python
tensorflow实现对张量数据的切片操作方式
Jan 19 Python
python使用列表的最佳方案
Aug 12 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 #Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 #Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 #Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 #Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 #Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 #Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 #Python
You might like
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
python计算时间差的方法
2015/05/20 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
数学系个人求职信范文
2014/01/30 职场文书
中学教师教育感言
2014/02/21 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server