飞鸽传书-发送文件-创建tcp服务器

FeiQTcp.py(新建文件)

import threading
import time
import socket

tcp_server_socket = None  # 用来存储tcp服务器套接字


def deal_feiq_data(recv_data):
    """处理接收到的飞秋数据"""
    # b'1_lbt80_0#128#000C29770BAB#0#0#0#4000#9:1501516970:Administrator:DONGGE-32E5DBE1:96:597ee52c:0:0:'
    recv_data = recv_data.decode("gbk", errors="ignore")
    feiq_data_list = recv_data.split(":", 5)

    feiq_data = dict()
    feiq_data['version'] = feiq_data_list[0]
    feiq_data['packet_id'] = feiq_data_list[1]
    feiq_data['user_name'] = feiq_data_list[2]
    feiq_data['host_name'] = feiq_data_list[3]
    feiq_data['command_num'] = feiq_data_list[4]
    feiq_data['option'] = feiq_data_list[5]
    return feiq_data


def get_file_info(option):
    """提取文件信息"""
    file_info_list = option.split(":", 3)
    packet_id = file_info_list[0]
    file_id = file_info_list[1]
    # int("0x131234", 16)---->将一个16进制数的字符串 转换为 整数
    return int(packet_id, 16), int(file_id)  # 用udp发送文件消息时的包编号,文件序号


def send_file(client_socket):
    """发送文件给客户端"""
    request_data = client_socket.recv(1024)
    # print(request_data)
    feiq_data = deal_feiq_data(request_data)
    packet_id, file_id = get_file_info(feiq_data['option'])
    print("对方请求下载文件的包编号是:%d, 序号是:%d" % (packet_id, file_id))
    client_socket.close()


def tcp_main():
    """用来完成tcp相关的功能控制"""
    global tcp_server_socket

    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_server_socket.bind(("", 2425))
    tcp_server_socket.listen(128)
    while True:
        # print("等待新客户的链接。。。。", end="")
        client_socket, client_addr = tcp_server_socket.accept()
        send_file_thread = threading.Thread(target=send_file, args=(client_socket,))
        send_file_thread.start()

if __name__ == "__main__":
    tcp_main()