基于TCP协议的基础版本,不支持大文件

Client.py

import socket

def main():
# 1. 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 获取服务器的ip port
# dest_ip = input("请输入下载服务器的IP:")
# dest_port = int(input("请输入下载服务器的Port:")) # 3. 链接服务器
# tcp_socket.connect((dest_ip, dest_port))
tcp_socket.connect(('127.0.0.1', 7890)) # 4. 获取下载的文件名字
download_file_name = input("请输入要下载的文件名字: ") # 5. 将文件名字发送到服务器
tcp_socket.send(download_file_name.encode('utf-8')) # 6. 接收文件中的数据
recv_data = tcp_socket.recv(1024) # 1024--->1k # 7. 保存接收到的数据到文件中
if recv_data:
with open("[新]"+download_file_name,"wb") as f:
f.write(recv_data) # 8. 关闭套接字
tcp_socket.close() if __name__ == '__main__':
main()

Server.py

import socket

def send_file_2_client(new_client_socket, client_addr):
# 1. 接收客户端发送过来的,要下载的文件名
file_name = new_client_socket.recv(1024).decode('utf-8')
print("客户端[%s]需要下载的文件是:%s" % (str(client_addr), file_name)) file_content = None
# 2. 打开这个文件,读取数据
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件[%s]" % file_name) # 3. 发送文件的数据给客户端
# new_client_socket.send("hahahah".encode('utf-8')) # 调试的时候,先给发个假得
if file_content:
new_client_socket.send(file_content) def main():
# 1. 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 创建监听
tcp_server_socket.bind(("", 7890)) # 3. 套接字被动监听数量
tcp_server_socket.listen(128) while True:
print("wait...")
# 获取客户端socket,客户端连接信息
new_client_socket, client_addr = tcp_server_socket.accept() # 调用发送文件函数
send_file_2_client(new_client_socket, client_addr) # 关闭套接字
new_client_socket.close() tcp_server_socket.close() if __name__ == '__main__':
main()

最新文章

  1. dom 节点篇 ---单体模式
  2. 关于a标签点击会出现的背景色的问题
  3. Nuget版本冲突的问题
  4. yii2中事务不能回滚的解决
  5. java常用工具类
  6. response.setContentType设置
  7. K3 WISE开发手册
  8. MTK+Android编译
  9. [Java]获取Window界面的标题栏的高度大小
  10. Codeforces Round #355 (Div. 2)
  11. HW7.3
  12. SVN的使用(转发)
  13. (Problem 62)Cubic permutations(待续)
  14. 判断0-N之间出现1的次数
  15. 2017西安网络赛 F
  16. 解决 python 中,时间日期不能序列化的问题
  17. eslint prettier editrorconfig - 写出干净的前端代码
  18. 读vue-0.6-observer.js源码
  19. 如何让xcode自动检查内存泄露
  20. java rpc

热门文章

  1. word2vec原理总结
  2. Python3基础 内置函数 eval str转为list tuple dict
  3. Python3基础 __file__ 查询模块的完整路径
  4. openlive writer 汉化方法
  5. 常用的sublime text 3插件
  6. Sqlserver (转载)事物与锁
  7. java设计思想-池化-手写数据库连接池
  8. spring框架是怎么样通过properties来获得对象的?
  9. 测试代码的练习——python编程从入门到实践
  10. python3:使用for循环打印九九乘法表