国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python3基于TCP實現CS架構文件傳輸

2020-02-15 22:35:55
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python3實現CS架構文件傳輸的具體代碼,供大家參考,具體內容如下

1、目標:

基于tcp實現CS架構的文件傳輸

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

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

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

2、socket模塊函數:

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

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

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

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             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 财经| 新丰县| 中宁县| 邵阳市| 永德县| 新安县| 高青县| 康马县| 彰化县| 江安县| 昭苏县| 海淀区| 琼中| 色达县| 微山县| 清水河县| 龙口市| 邵武市| 井陉县| 济宁市| 海林市| 渝中区| 南和县| 虹口区| 云龙县| 宣威市| 大港区| 襄汾县| 枣强县| 阿勒泰市| 庆云县| 美姑县| 东山县| 买车| 高陵县| 安塞县| 博湖县| 巴林右旗| 新巴尔虎左旗| 天柱县| 沾益县|