欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tcp下载器(客户端,服务端)详解

程序员文章站 2022-06-06 14:10:07
...

tcp下载器客户端流程
1,创建socket套接字对象
2.建立连接
3.发送所需文件信息名称
4.接收回传信息并且存下来
5.关闭socket
参考代码:


import socket
def main():
    #创建套接字对象
    tcp_clients_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #建立连接
    server_addr = input("请输入服务器ip地址:")
    server_port = int(input("请输入服务器端口号:"))
    tcp_clients_socket.connect((server_addr,server_port))

    #发送文件所需信息
    file_name = input("请输入文件名:")
    tcp_clients_socket.send(file_name.encode('utf-8'))

    #接收回传信息并且存下来
    recv_data = tcp_clients_socket.recv(1024*1024)
    file_data = recv_data.decode('utf-8')
    if file_data:
        f = open("/home/python/Desktop/" + file_name,"w")
        f.write(file_data)
        f.close()
    else:
        print("没有数据")

    tcp_clients_socket.close()

if __name__ == '__main__':
    main()

tcp下载器服务端流程
1,创建socket套接字对象
2.端口复用
3.绑定端口
4.将socket主动状态变为被动,等待客户端请求连接
#创建一个新的套接字用来对接客户端
5.接收信息
6.判断能否找到文件,找到则将内容发送
找到文件,打开文件,读取信息,发送信息
7.发送找到的文件信息
8.关闭socket

import socket


def file_concent(file_name):
    try:
        f = open(file_name,"r")
        concent = f.read()
        return concent
    except:
        print("没有相关文件")

def main():
    #创建套接字对象
    tcp_clients_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    #端口复用
    tcp_clients_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    #3.绑定端口
    tcp_clients_socket.bind(('',8888))

    #4.将socket主动状态变为被动,等待客户端请求连接
    tcp_clients_socket.listen(5)
    while True:
        #创建一个新的套接字用来对接客户端
        new_socket,client_addr = tcp_clients_socket.accept()
        print("有新的客户端请求来自",client_addr)
        while True:
            #接收信息
            recv_file_name = new_socket.recv(1024)
            if recv_file_name:
                file_name = recv_file_name.decode('utf-8')
                print("要下载的文件名称为:",file_name)
                #查找文件并发送
                new_concent = file_concent(file_name)
                new_socket.send(new_concent.encode('utf-8'))
            else:
                print("客户端已下线")
                break
        new_socket.close()
    tcp_clients_socket.close()

if __name__ == '__main__':
    main()
相关标签: 学习笔记