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