Python使用socket_TCP實現小檔案下載

大大打打發表於2020-10-07

伺服器

import socket

# 1.建立套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.繫結埠
server.bind(('127.0.0.1', 7890))
# 3.變為被動監聽模式
server.listen(4)
while True:
    # 4.等待客戶端連結
    s_new, addr = server.accept()
    print('使用者【{}】已經成功連線!!'.format(addr[0]))
    while True:
        # 5.接受訊息
        try:
            # 若客戶端強行斷開連線伺服器不會崩潰
            recv_data = s_new.recv(1024).decode('utf-8')
            if recv_data:
                print('來自【{}】的使用者表示要下載: 【{}】'.format(addr[0], recv_data))
                # 6.傳送訊息
                try:
                    f = open(recv_data, 'rb')
                    content = f.read()
                    send_data = s_new.send(content)
                    f.close()
                    print('下載成功!')
                except Exception as result:
                    send_data = s_new.send('Non'.encode('utf-8'))
                    print('未找到要下載的檔案')
            else:
                print('使用者已經正常退出!')
                break
        except Exception as res:
            print('使用者已經退出連線!')
            break
    s_new.close()
# 7,關閉套接字
server.close()

客戶端

import socket
# 建立套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 繫結IP地址
s.connect(('127.0.0.1', 7890))
while True:

    # 傳送資料
    send_data = str(input('請輸入想要下載的檔名:'))
    if send_data == 'exit':
        print('已退出下載!')
        break
    s.send(send_data.encode('utf-8'))

    # 接收資料
    recv_data = s.recv(2048)
    if recv_data == 'Non'.encode('utf-8'):
        print('未找到要下載的檔案!')
    else:
        with open('【new】' + send_data, 'wb') as f:
            f.write(recv_data)
            print('[{}]下載成功!'.format(send_data))
            f.close()

# 關閉套接字
s.close()

執行結果(伺服器):

執行結果(客戶端):

檔案結果;

相關文章