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

20172304 2019-2020-2 《Python程序設計》實驗3報告

課程:《Python程序設計》
班級:1723
姓名:段志軒
學號:20172304
實驗教師:王志強
實驗日期:2020年5月16日
必修/選修: 公選課

1.實驗內容

創建服務端和客戶端,服務端在特定端口監聽多個客戶請求。客戶端和服務端通過Socket套接字(TCP/UDP)進行通信。

2. 實驗過程及結果

先引入socket 庫,隨後還需要sys等,由於這裏使用的是base64加密,所以需要引入base64庫進行加密。準備工作做完了,就開始建立連接了。建立連接時要找出沒有被佔有的端口,否則無法連接。同時還要找到可使用的IP地址連接完畢後就可以傳輸文件了。

客戶端代碼:

import socket
import sys
import base64

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 9001))
except socket.error as msg:
    print(msg)
    sys.exit(1)
print(s.recv(1024).decode())
# 需要傳輸的文件路徑
filepath = 'C:/Users/24098/Desktop/new_file.txt'
fp = open(filepath, 'rb')
data = fp.read(1024)

encodestr = base64.b64encode(data)  #加密--轉換成base64編碼
print(encodestr)
s.send(encodestr)
# 關閉當期的套接字對象
s.close()

服務器端代碼:

import socket
import sys
import base64
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    # 綁定端口爲9001
    s.bind(('127.0.0.1', 9001))
    # 設置監聽數
    s.listen(10)
except socket.error as msg:
    print(msg)
    sys.exit(1)
print('Waiting connection...')
conn, addr = s.accept()
print('Accept new connection from {0}'.format(addr))
# 收到請求後的回覆
conn.send('Hi, Welcome to the server!'.encode('utf-8'))
fp = open('./' + "new_file.txt", 'wb')
print('start receiving...')

# 將分批次傳輸的二進制流依次寫入到文件
data = conn.recv(1024)
decodestr = base64.b64decode(data)  #解密
print(decodestr)
fp.write(decodestr)
fp.close()
print('end receive...')
# 傳輸結束斷開連接
conn.close()

運行結果:

3. 實驗過程中遇到的問題和解決過程

之前做過類似實驗,所以此次實驗並沒有出什麼大的差錯。

其他(感悟、思考等)

本次實驗做的是使用python進行socket編程要想熟練運用python必須多實踐,多編寫代碼,這樣運用起來就輕鬆很多。當然,做實驗前還需要把每個細節弄清楚,弄明白,實驗後,還要複習,思考,這樣印象深刻,記得才牢固。通過這次實驗我學到了不少知識,更重要的事,做實驗的過程,思考問題的方法,這與做其他的實驗是通用的,真正使我們受益匪淺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章