0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內不再提示

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

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

1.實驗內容

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

要求:

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

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

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

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

2. 實驗過程及結果

(1)設計思路

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

加密上選擇的是基于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

客戶端部分:

循環(huán)發(fā)送字符串給服務器。取‘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.發(fā)送字符串 2.發(fā)送文件 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(‘連接已關閉’)

服務器部分:

循環(huán)接收客戶端發(fā)送的數據,并寫入文件中。取‘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(‘服務器已創(chuàng)建,正在監(jiān)聽中。..’)

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)程序結果

客戶端:

發(fā)送字符串:

pYYBAGJEBTqAFNvpAACUbGDumuk707.png

發(fā)送文件

pYYBAGJEBUOARje3AAO3NxS4ZAE036.png

結束連接

pYYBAGJEBU2AHG0HAADivBd--cw344.png

服務器:

pYYBAGJEBVaAUKpUAACXU-zdY10605.png

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

    關注

    3

    文章

    261

    瀏覽量

    30352
  • 語言編程
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9882
  • python
    +關注

    關注

    55

    文章

    4768

    瀏覽量

    84376
收藏 人收藏

    評論

    相關推薦

    第5章 MATLAB程序設計.ppt

    第5章 MATLAB程序設計
    發(fā)表于 10-24 16:40 ?0次下載

    最簡單的C程序設計

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

    算法-程序設計的靈魂

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

    程序設計基礎教程

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

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

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

    基于TouchGFX的智能手表設計 —硬件驅動層程序設計

    電子發(fā)燒友網站提供《基于TouchGFX的智能手表設計 —硬件驅動層程序設計.pdf》資料免費下載
    發(fā)表于 01-05 11:20 ?1次下載

    python程序的文件擴展名

    Python是一種高級編程語言,它的文件擴展名為.py。在本文中,我們將詳細討論Python程序文件的擴展名,包括其含義、用途以及與其他文件類型的區(qū)別。 首先,讓我們來了解一下文件擴展名的概念。文件
    的頭像 發(fā)表于 11-29 14:25 ?1837次閱讀

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

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

    python運行程序出現紅色空白

    當你運行Python程序時,如果出現紅色空白,這通常意味著有一個錯誤發(fā)生了。這個錯誤可能是由多種原因造成的,本文將詳細介紹可能的原因和解決方法,幫助你解決這個問題。 語法錯誤:Python是一種強
    的頭像 發(fā)表于 11-28 15:30 ?1814次閱讀

    如何運行Python程序

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

    python怎么運行程序

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

    python嵌入包和安裝程序的區(qū)別

    中。 在Python中,有兩種常見的方式來引入和使用第方擴展功能,即嵌入包和安裝程序。本文將詳細介紹這兩種方式的區(qū)別,以及何時應該選擇使用哪種方式。 一、嵌入包 概述 嵌入包是將第
    的頭像 發(fā)表于 11-23 16:42 ?8715次閱讀

    python寫完程序之后怎么運行

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

    趣味程序設計入門

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

    c語言程序設計概述

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