tcp协议(二)

tcp协议(二)

tcp数据传输综合案例

案例:文件下载器

功能分析

文件下载器客户端:

import socket

"""
1.创建socket对象
2.连接服务端  connect
3.发送接收信息
    创建下载文件名
4.关闭连接
"""

# 1.创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.连接服务端  connect
client_socket.connect(('192.168.43.51', 6666))
# 3.发送接收信息
print(client_socket.recv(1024).decode())
# 输入是否下载
num1 = input()
client_socket.send(num1.encode())
# 输入下载文件路径
print(client_socket.recv(1024).decode())
file_path = input()
client_socket.send(file_path.encode())
names = file_path.split('/')[-1]
# 接收正在下载
print(client_socket.recv(1024).decode())
#     创建下载文件名
try:
    # file_name = open('/home/python/Downloads/' + names, 'wb')
    # with 打开文件 不需要手动关闭   会自动关闭文件
    with open('/home/python/Downloads/' + names, 'wb') as file_name:
        while True:
            content = client_socket.recv(1024)
            if content:
                file_name.write(content)
            else:
                break
except Exception as result:
    print(result)
else:
    print(names + "下载完成")
# 4.关闭连接
client_socket.close()

文件下载器服务端

import socket

"""
1.创建socket对象
2.绑定端口
3.listen设置监听  socket由主动变为被动
4.accept 等待连接  返回的是元组  第一个是socket对象  第二个是客户端ip和端口
5.接收数据
6.发送数据
    读取文件中数据进行发送
7.关闭当前客户端连接
8.关闭连接
"""

# 1.创建socket对象
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置 服务器端地址可以重用
# tcp_socket.setsockopt(当前socket, 属性名, 属性值) 设置套接字属性
# socket.SOL_SOCKET 当前socket
# socket.SO_REUSEADDR 重复使用地址 True 可以重用  False 不可以重用(默认)
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.绑定端口
tcp_socket.bind(('', 6666))
# 3.listen设置监听  socket由主动变为被动
tcp_socket.listen(128)
# 4.accept 等待连接  返回的是元组  第一个是socket对象  第二个是客户端ip和端口
while True:
    client_socket, ip_port = tcp_socket.accept()
    print('[新的客户端:]', ip_port)
    client_socket.send("是否下载文件:1.是 0.否".encode())
    # 5.接收数据
    recv_data = client_socket.recv(1024).decode()
    if recv_data == "1":
        client_socket.send("请输入文件路径:".encode())
        recv_file = client_socket.recv(1024).decode()
        client_socket.send("正在下载...".encode())
        # 6.发送数据,打开文件
        # file = open(recv_file, 'rb')
        with open(recv_file, 'rb') as file:
            while True:
                # 读取文件中数据进行发送
                content = file.read(1024)
                if content:
                    client_socket.send(content)
                else:
                    break
            client_socket.close()
    else:
        # 7.关闭当前客户端连接
        client_socket.close()

# 8.关闭连接
# tcp_socket.close()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值