亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python3基于TCP實現(xiàn)CS架構文件傳輸

 更新時間:2018年07月28日 16:31:14   作者:N_Young  
這篇文章主要為大家詳細介紹了python3基于TCP實現(xiàn)CS架構文件傳輸,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python3實現(xiàn)CS架構文件傳輸?shù)木唧w代碼,供大家參考,具體內(nèi)容如下

1、目標:

基于tcp實現(xiàn)CS架構的文件傳輸

指令列表:(1)get:從服務器端下載文件

                    (2)put:向服務器端上傳文件

                    (3)list:獲得服務器端的目錄

2、socket模塊函數(shù):

(1)send和sendall:send的作用是發(fā)送TCP數(shù)據(jù),返回發(fā)送的數(shù)據(jù)大小。send函數(shù)不保證將所有數(shù)據(jù)全部發(fā)送,因此可能需要重復多次才能完成所有數(shù)據(jù)的發(fā)送。sendall的作用是發(fā)送完整的TCP數(shù)據(jù),成功時返回None,失敗時拋出異常

(2)bind:在服務器端使用,用于將socket綁定在一個特定的ip地址和端口上。在《UNIX網(wǎng)絡編程》一書中提到,如果調(diào)用connect或者listen之前沒有bind一個特定的端口,內(nèi)核會為相應的套接字分配一個隨機的端口。因此,在客戶端調(diào)用connect函數(shù)之前不需要bind

(3)listen:通過參數(shù)設定服務器端最多可以接受幾個客戶端的連接,但是只有在完成與第一個客戶端的傳送后才會進行與第二個客戶端的傳送

3、代碼:

(1)服務器端:

import socket 
import os 
import sys 
import time 
 
Host = '127.0.0.1' 
Port = 12000 
Addr = (Host, Port) 
 
sockListener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sockListener.bind(Addr) 
sockListener.listen(5) 
 
def recvfile(cliSocket): 
  print('start reveiving file...') 
  msg = 'no problem' 
  msg_utf8 = msg.encode(encoding="utf-8") 
  cliSocket.send(msg_utf8) 
  filename_utf8 = clientSocket.recv(4096) 
  filename = filename_utf8.decode() 
  f = open(filename, 'wb') 
  while True: 
    data_utf8 = cliSocket.recv(4096) 
    data = data_utf8.decode() 
    if data=='EOF': 
      print('received file successfully') 
      break 
    f.write(data_utf8) 
  f.close() 
 
def sendfile(cliSocket): 
  print('start sending file...') 
  msg = 'no problem' 
  msg_utf8 = msg.encode(encoding="utf-8") 
  cliSocket.send(msg_utf8) 
  filename_utf8 = cliSocket.recv(4096) 
  filename = filename_utf8.decode() 
  f = open(filename, 'rb') 
  while True: 
    data = f.read(4096) 
    if not data: 
      break 
    cliSocket.sendall(data) 
  f.close() 
  time.sleep(1) 
  msg = 'EOF' 
  msg_utf8 = msg.encode(encoding="utf-8") 
  cliSocket.sendall(msg_utf8) 
  print('sent file successfully') 
 
def getList(cliSocket): 
  path = sys.path[0] 
  every_file = os.listdir(path) 
  for filename in every_file: 
    pathmsg = filename + '\n' 
    pathmsg_utf8 = pathmsg.encode(encoding="utf-8") 
    cliSocket.sendall(pathmsg_utf8) 
  time.sleep(1) 
  msg = 'EOF' 
  msg_utf8 = msg.encode(encoding="utf-8") 
  cliSocket.sendall(msg_utf8) 
  print('all filenames have been send') 
 
while True: 
  print('waiting for connection...') 
  clientSocket, addr = sockListener.accept() 
  print('... connection from:', addr) 
 
  while True: 
    msg_utf8 = clientSocket.recv(4096) 
    msg = msg_utf8.decode() 
    if msg=='exit': 
      print(addr, 'close the connection') 
      break 
    elif msg=='get': 
      sendfile(clientSocket) 
    elif msg=='put': 
      recvfile(clientSocket) 
    elif msg=='list': 
      getList(clientSocket) 
    else: 
      print('client error!') 
      break 

(2)客戶端:

import socket 
import time 
 
Host = '127.0.0.1' 
Port = 12000 
Addr = (Host, Port) 
 
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
clientSocket.connect(Addr) 
 
def recvfile(filename): 
  print('start receiving file...') 
  f = open(filename, 'wb') 
  filename_utf8 = filename.encode(encoding="utf-8") 
  clientSocket.sendall(filename_utf8) 
  while True: 
    data_utf8 = clientSocket.recv(4096) 
    data=data_utf8.decode() 
    if data=='EOF': 
      print('receive file successfully') 
      break 
    f.write(data_utf8) 
  f.close() 
 
def sendfile(filename): 
  print('start sending file...') 
  f = open(filename, 'rb') 
  filename_utf8 = filename.encode(encoding="utf-8") 
  clientSocket.sendall(filename_utf8) 
  while True: 
    data = f.read(4096) 
    if not data: 
      break 
    clientSocket.sendall(data) 
  f.close() 
  time.sleep(1) 
  endmsg = 'EOF' 
  endmsg_utf8 = endmsg.encode(encoding="utf-8") 
  clientSocket.sendall(endmsg_utf8) 
  print('send file successfully') 
 
def confirm(confirm_command): 
  confirm_command_utf8 = confirm_command.encode(encoding="utf-8") 
  clientSocket.sendall(confirm_command_utf8) 
  msg_utf8 = clientSocket.recv(4096) 
  msg = msg_utf8.decode() 
  print('reveive message:', msg) 
  if msg=='no problem': 
    return True 
  else: 
    return False 
 
def operation1(filename): 
  if confirm('get'): 
    recvfile(filename) 
  else: 
    print('serve error!') 
 
def operation2(filename): 
  if confirm('put'): 
    sendfile(filename) 
  else: 
    print('serve error!') 
 
def operation3(act): 
  if act=='list': 
    act_utf8 = act.encode(encoding="utf-8") 
    clientSocket.sendall(act_utf8) 
    while True: 
      msg_utf8 = clientSocket.recv(1024) 
      msg = msg_utf8.decode() 
      if msg=='EOF': 
        break 
      print(msg) 
  else: 
    print('wrong command!') 
try: 
  while True: 
    command = input('>>>') 
    if not command: 
      continue 
    elif command=='exit': 
      command_utf8 = command.encode(encoding="utf-8") 
      clientSocket.sendall(command_utf8) 
      print('the connection is closed') 
      break 
    msg = command.split() 
    if len(msg)==2 and msg[0]=='get': 
      operation1(msg[1]) 
    elif len(msg)==2 and msg[0]=='put': 
      operation2(msg[1]) 
    elif len(msg)==1: 
      operation3(msg[0]) 
    else: 
      print('wrong command!') 
except socket.error as e: 
  print('error:', e) 
  print('an error causes the connection to close!') 
  clientSocket.close() 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python如何實現(xiàn)代碼檢查

    python如何實現(xiàn)代碼檢查

    這篇文章主要介紹了python如何實現(xiàn)代碼檢查,如果代碼不規(guī)范,亂七八糟的,被小伙伴打死或者熬夜找bug事小,影響項目進度或者破壞項目結構就完蛋了,需要的朋友可以參考下
    2019-06-06
  • python執(zhí)行系統(tǒng)命令4種方法與比較

    python執(zhí)行系統(tǒng)命令4種方法與比較

    這篇文章主要介紹了python執(zhí)行系統(tǒng)命令4種方法與比較,需要的朋友可以參考下
    2021-04-04
  • python實現(xiàn)合并兩個排序的鏈表

    python實現(xiàn)合并兩個排序的鏈表

    這篇文章主要為大家詳細介紹了python實現(xiàn)合并兩個排序的鏈表,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Python3 使用cookiejar管理cookie的方法

    Python3 使用cookiejar管理cookie的方法

    今天小編就為大家分享一篇Python3 使用cookiejar管理cookie的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python實現(xiàn)的簡單算術游戲實例

    Python實現(xiàn)的簡單算術游戲實例

    這篇文章主要介紹了Python實現(xiàn)的簡單算術游戲,可實現(xiàn)隨機給出算數(shù)表達式,并對用戶輸入答案進行判斷的功能,需要的朋友可以參考下
    2015-05-05
  • 淺談TensorFlow之稀疏張量表示

    淺談TensorFlow之稀疏張量表示

    這篇文章主要介紹了淺談TensorFlow之稀疏張量表示,具有很好的參考就價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 關于Numpy中argsort()函數(shù)的用法解讀

    關于Numpy中argsort()函數(shù)的用法解讀

    這篇文章主要介紹了關于Numpy中argsort()函數(shù)的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • python實現(xiàn)多圖像疊置輸出

    python實現(xiàn)多圖像疊置輸出

    這篇文章主要為大家詳細介紹了python實現(xiàn)多圖像疊置輸出,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python進階學習之帶你探尋Python類的鼻祖-元類

    Python進階學習之帶你探尋Python類的鼻祖-元類

    這篇文章主要介紹了Python進階學習之帶你探尋Python類的鼻祖-元類,文中有非常詳細的解釋,對正在學習python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    如何使用python爬取知乎熱榜Top50數(shù)據(jù)

    主要是爬取知乎熱榜的問題及點贊數(shù)比較高的答案,通過requests請求庫進行爬取,對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-09-09

最新評論