1. 程式人生 > 程式設計 >Python使用socket_TCP實現小檔案下載功能

Python使用socket_TCP實現小檔案下載功能

伺服器

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()

執行結果(伺服器):

Python使用socket_TCP實現小檔案下載功能

執行結果(客戶端):

Python使用socket_TCP實現小檔案下載功能

檔案結果;

Python使用socket_TCP實現小檔案下載功能

到此這篇關於Python使用socket_TCP實現小檔案下載功能的文章就介紹到這了,更多相關Python小檔案下載內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!