## 第乙個星期,先實現乙個基於tcp的檔案傳輸功能。
python開頭為什麼要有# -*- coding:utf-8 -*-
?
py檔案當中是不支援中文的,即使你輸入的注釋是中文也不行,為了解決這個問題,
就需要把檔案編碼型別改為utf-8的型別,輸入這個**就可以讓py原始檔裡面有中文了。
本篇所遇到的問題:
1
.if __name__ ==
'__main__':的作用:
"ifname== 『main』:"下的**在檔案直接作為指令碼執行時才會被執行,而import在其他指令碼中是不會被執行的。
2.socket_name.bind()函式裡的引數是"(ip,port)"。
3.傳送檔案或者字串,得先在傳送端把變數用"utf-8"編碼encode,否則接收端會收到空串,然後得在接收端decode。
關於socket程式設計裡socket()的引數,可以參照無名小妖的部落格
開始下手:
先實現最簡單的客戶端和伺服器通訊
伺服器端的執行邏輯:
建立socket——》繫結埠和ip——》監聽listen()
——》while true:
conn,addr = ***.accept() 接收客戶端的請求連線,並建立新的連線conn——》conn.recv()接收客戶端的檔案請求——》read() 讀取檔案資料——》讀到資料後,conn.send()傳送給客戶端
伺服器端**
from socket import
*#將所有關於socket的庫都載入
serverip = 『127.0
.0.1』#本機位址
serverport =
10055
#隨便宣告乙個埠,要大於1024
#建立tcp套接字套接字
server_socket = socket(af_inet, sock_stream)
#繫結埠號和ip位址
server_socket.bind(
(serverip,serverport)
)#開始監聽
server_socket.listen(5)
while
true
: conn,addr = server_socket.accept(
)while
true
:#接收客戶端的請求資訊
file_name_data = conn.recv(
1024)if
not file_name_data:
#若收到空的檔案
print
("客戶端斷開連線"
)break
#對二進位制資料進行解碼
file_name_data.decode(
"utf-8"
)#判斷檔案是否存在
if os.path.exists(file_name)
#檔案存在
with
open
(file_name,
"rb")as
file
:#讀取檔案資料
while
true
:#迴圈讀取檔案資料
file_data =
file
.read(
1024
)if file_data:
conn.send(file_data)
#傳送資料
else
:print
("請求的檔案資料傳送完成"
)break
else
:print()
#斷開連線
print
("伺服器斷開連線"
) conn.close(
) server_socket.close(
)#
客戶端邏輯:
建立套接字——》連線伺服器,***.connet((ip,port))——》傳送檔案請求***.send(file_name)(需要把file_name用utf-8編碼)——》while true: recv()——》write()
客戶端**:
serverip =
'127.0.0.1'
serverport =
10055
from socket import
*#建立客戶端套接字
client_socket = socket(af_inet,sock_stream)
#和伺服器連線
client_socket.connect(
(serverip,serverport)
)file_name =
input()
#utf-8編碼
file_name_data = file_name.encode(
"utf-8"
)#傳送請求資料
client_socket.send(file_name_data)
#把資料寫入到檔案裡
with
open
("d:/計算機網路/socket程式設計/client共享區/"
+file_name,
"wb")as
file
:while
true
: file_data = client_socket.recv(
1024
)if file_data:
file
.write(file_data)
else
:print
("伺服器端把資料傳送完成並關閉了連線"
)break
client_socket.close(
)
就這樣。 大作業感悟
作為本次大作業的組長,看著專案從呱呱墜地到瓜熟蒂落,就像看著自己的孩紙長大一樣。心中感慨萬千,成長的過程總是快樂與痛苦並行,喜悅與煩惱同在的。從兩個星期前的頭腦風暴到前期的精心設計 中期的分工實施再到後期的測試與優化。每一步走的都讓 連忘返,每一步都讓人記憶猶新。在這兩個星期中,我們不僅得到了知識和...
爬蟲大作業
1 選乙個自己感興趣的主題。2 用python 編寫爬蟲程式,從網路上爬取相關主題的資料。3 對爬了的資料進行文字分析,生成詞云。4 對文字分析結果進行解釋說明。5 寫一篇完整的部落格,描述上述實現過程 遇到的問題及解決辦法 資料分析思想及結論。6 最後提交爬取的全部資料 爬蟲及資料分析源 impo...
爬蟲大作業
1.選乙個自己感興趣的主題。2.用python 編寫爬蟲程式,從網路上爬取相關主題的資料。3.對爬了的資料進行文字分析,生成詞云。4.對文字分析結果進行解釋說明。5.寫一篇完整的部落格,描述上述實現過程 遇到的問題及解決辦法 資料分析思想及結論。6.最後提交爬取的全部資料 爬蟲及資料分析源 impo...