文件上传工具

说明:客户端读取本地文件,然后通过socket通信发送给服务器,服务器接收数据保存到本地

TCP:

服务器端代码😀:

import socket

HOST = ''
PORT = 8888
#路径地址
f_name = r'chapter18\18.2.5\coco2dxcplus.jpg'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen(10)
    print('---starting---')

    while True:
        with s.accept()[0] as conn:
            # 创建字节序列对象列表,作为接收数据的缓冲区
            buffer = []
            while True:
                # 接收的数据添加到缓冲区
                data = conn.recv(1024)
                if data:
                    buffer.append(data)
                else:
                    # 没有接收到数据就退出
                    break
        # 将接收到的字符序列对象列表合并为一字节序列对象
        b = bytes().join(buffer)
        with open(f_name, 'wb') as f:
            f.write(b)

        print('Finished')


客户端的代码😀:

import socket

HOST = '127.0.0.1'
PORT = 8888
#路径地址
f_name = r'chapter18\18.2.5\coco2dxcplus.jpg'

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))

    with open(f_name, 'rb') as f:
        b = f.read()
        s.sendall(b)
        print('Client Finished')

​------------------------------------------------------------------这是一个虚线------------------------------------------------------------------------

UDP

服务端代码😀:

import socket

HOST = '127.0.0.1'
PORT = 8888

f_name = 'test_copy.txt'

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    s.bind((HOST, PORT))
    print('服务器启动...')

    # 创建字节序列对象列表,作为接收数据的缓冲区
    buffer = []
    while True:  # 反复接收数据
        data, _ = s.recvfrom(1024)
        if data:
            flag = data.decode()
            if flag == 'bye':
                break
            buffer.append(data)
        else:
            # 没有接收到数据,进入下次循环继续接收
            continue
    # 将接收的字节序列对象列表合并为一个字节序列对象
    b = bytes().join(buffer)
    with open(f_name, 'w') as f:
        f.write(b.decode())

    print('服务器接收完成。')


客户端的代码😀:

import socket

HOST = '127.0.0.1'
PORT = 8888
f_name = 'test.txt'

# 服务器地址
server_address = (HOST, PORT)

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
    with open(f_name, 'r') as f:
        while True:  # 反复从文件中读取数据
            data = f.read(1024)
            if data:
                # 发送数据
                s.sendto(data.encode(), server_address)
            else:
                # 发送结束标志
                s.sendto(b'bye', server_address)
                # 文件中没有可读取的数据则退出
                break

        print('客户端上传数据完成。')


最后修改:2019 年 08 月 11 日 04 : 21 PM
这不叫给钱,是打赏。

发表评论