<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

《Python程序設計》實驗三報告

li5236 ? 來源:博客園 ? 作者:博客園 ? 2022-03-30 15:21 ? 次閱讀

1.實驗內容

創建服務端和客戶端,服務端在特定端口監聽多個客戶請求??蛻舳撕头斩送ㄟ^Socket套接字(TCP/UDP)進行通信。

要求:

(1)創建服務端和客戶端,選擇一個通信端口,用Python語言編程實現通信演示程序;

(2)要求包含文件的基本操作,例如打開和讀寫操作。

(3)要求發送方從文件讀取內容,加密后并傳輸;接收方收到密文并解密,保存在文件中。

(4)程序代碼托管到碼云。

2. 實驗過程及結果

(1)設計思路

該實驗目標是制作一個基于socket的通訊器,根據之前課上學習的內容及課后作業,本次實驗不難完成。

加密上選擇的是基于pyDes的CBC模式DES加密,實現了客服端與服務器的雙向加密通信?;赑ython標準庫tkinter,實現了可視化選擇目標文件的功能。但由于沒有具體實現tkinter窗體(極其不標準的使用方法),導致使用該功能后會有一個無內容的tkinter窗體殘留,雖然不影響總體使用,但對程序的完成性和一致性有所破壞。

(2)主要代碼介紹

部分代碼有參考。

報告中只貼出了部分代碼,全部代碼已上傳碼云:服務器部分,客戶端部分,DES加解密部分

加解密部分:

基于pyDes庫實現DES加解密功能。

from pyDes import des, CBC, PAD_PKCS5

import binascii

key_ = ‘12345675’

def des_encrypt(s):

“”“

DES 加密

:param s: 原始字符串

:return: 加密后字符串,16進制

”“”

secret_key = key_

iv = secret_key

k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)

en = k.encrypt(s, padmode=PAD_PKCS5)

return binascii.b2a_hex(en)

def des_descrypt(s):

“”“

DES 解密

:param s: 加密后的字符串,16進制

:return: 解密后的字符串

”“”

secret_key = key_

iv = secret_key

k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)

de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)

return de

客戶端部分:

循環發送字符串給服務器。取‘close_’作為關閉連接的保留字。

import socket

from mydes import des_descrypt, des_encrypt

from tkinter.filedialog import askopenfilename

if __name__ == ‘__main__’:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((‘127.0.0.1’, 8001))

print(‘連接服務器成功’)

while True:

ch = input(‘1.發送字符串 2.發送文件 3.退出\n請選擇想要使用的功能:’)

if ch == ‘1’:

str_ = input(‘請輸入要傳輸的內容:’)

elif ch == ‘2’:

filename = askopenfilename()

with open(filename, ‘r’, encoding=‘utf-8’) as f:

str_ = f.read()

elif ch == ‘3’:

str_ = ‘close_’

str_ = des_encrypt(str_)

s.sendall(str_)

break

else:

print(‘無該選項,請重新輸入’)

str_ = des_encrypt(str_)

# print(type(str_))

s.sendall(str_)

data = s.recv(1024)

data = des_descrypt(data)

print(data.decode())

s.close()

print(‘連接已關閉’)

服務器部分:

循環接收客戶端發送的數據,并寫入文件中。取‘close_’作為關閉連接的保留字。

import socket

from mydes import des_descrypt, des_encrypt

if __name__ == ‘__main__’:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((‘127.0.0.1’, 8001))

print(‘服務器已創建,正在監聽中。..’)

s.listen()

conn, address = s.accept()

while True:

data = conn.recv(1024)

data = des_descrypt(data)

# print(data, type(data))

if data == b‘close_’:

break

else:

with open(‘received’, ‘wb’) as f:

f.write(data)

str_ = ‘服務器已接收:’+str(data)

str_ = des_encrypt(str_.encode())

conn.sendall(str_)

print(‘接收數據:’, data.decode(), ‘\n已寫入received.txt文件中’)

s.close()

print(‘服務器關閉’)

(4)程序結果

客戶端:

發送字符串:

pYYBAGJEBTqAFNvpAACUbGDumuk707.png

發送文件

pYYBAGJEBUOARje3AAO3NxS4ZAE036.png

結束連接

pYYBAGJEBU2AHG0HAADivBd--cw344.png

服務器:

pYYBAGJEBVaAUKpUAACXU-zdY10605.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序設計
    +關注

    關注

    3

    文章

    261

    瀏覽量

    30227
  • 語言編程
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9851
  • python
    +關注

    關注

    52

    文章

    4697

    瀏覽量

    83591
收藏 人收藏

    評論

    相關推薦

    最簡單的C程序設計

    電子發燒友網站提供《最簡單的C程序設計.pptx》資料免費下載
    發表于 05-28 16:41 ?0次下載

    算法-程序設計的靈魂

    電子發燒友網站提供《算法-程序設計的靈魂.pptx》資料免費下載
    發表于 05-28 16:39 ?0次下載

    程序設計基礎教程

    電子發燒友網站提供《程序設計基礎教程.pptx》資料免費下載
    發表于 05-28 16:37 ?0次下載

    如何使用linux下gdb來調試python程序

    如何使用linux下gdb來調試python程序? 在Linux下,可以使用GDB(GNU調試器)來調試Python程序。GDB是一個強大的調試工具,可以幫助開發者診斷和修復
    的頭像 發表于 01-31 10:41 ?632次閱讀

    運行Python程序的幾種常見方法

    Python是一種高級編程語言,具有簡單易學,易于閱讀和調試的特點。當你完成了一個Python程序之后,你需要運行它以檢查程序是否按照預期工作。下面是運行
    的頭像 發表于 11-28 15:32 ?551次閱讀

    如何運行Python程序

    運行Python程序非常簡單。Python是一種解釋型語言,這意味著可以直接通過解釋器來執行代碼。下面我將詳細介紹如何運行Python程序。
    的頭像 發表于 11-24 09:31 ?774次閱讀

    python怎么運行程序

    Python是一種廣泛使用的編程語言,它的簡易和可讀性使得它成為初學者和專業開發人員的首選。在運行Python程序之前,您需要安裝Python解釋器,然后按照以下步驟進行操作。 步驟1
    的頭像 發表于 11-24 09:25 ?2090次閱讀

    python寫完程序之后怎么運行

    Python是一門簡潔、易學的編程語言,被廣泛應用于數據分析、人工智能等領域。在學習Python編程的過程中,了解程序的運行機制是至關重要的。本文將詳盡解析Python
    的頭像 發表于 11-22 11:10 ?701次閱讀

    趣味程序設計入門

    電子發燒友網站提供《趣味程序設計入門.pdf》資料免費下載
    發表于 11-20 10:36 ?0次下載
    趣味<b class='flag-5'>程序設計</b>入門

    c語言程序設計概述

    電子發燒友網站提供《開源硬件-開發者智慧之c語言程序設計(帶書簽).pdf》資料免費下載
    發表于 11-20 10:25 ?1次下載
    c語言<b class='flag-5'>程序設計</b>概述

    嵌入式軟件程序設計方案

    在嵌入式軟件程序設計過程中中,經常會遇到超時(或定時)的處理情況,基本處理思想是在時間到的時候進行相關程序處理,下面介紹兩種超時(或定時)的程序設計方案。
    發表于 09-06 09:27 ?535次閱讀
    嵌入式軟件<b class='flag-5'>程序設計</b>方案

    淺談項目中的程序設計思路與步驟

    對于一個沒有太多程序設計經驗的萌新工程師來說,如何有規劃有條理的進行程序設計,是一個很值得學習的課題。在本文中,作者結合自身的經驗,淺要的談一談項目中的程序設計思路與步驟。
    的頭像 發表于 09-04 10:48 ?670次閱讀

    C語言程序設計(ppt版)

    C語言程序設計(ppt版)
    發表于 08-07 15:33 ?13次下載

    C語言程序設計--火車訂票系統

    C語言程序設計--火車訂票系統
    的頭像 發表于 08-01 00:40 ?524次閱讀
    C語言<b class='flag-5'>程序設計</b>--火車訂票系統

    解析PLC梯形圖程序設計

    解析PLC梯形圖程序設計
    的頭像 發表于 06-30 11:14 ?1146次閱讀
    解析PLC梯形圖<b class='flag-5'>程序設計</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>