計網大作業 個人雲空間

2021-10-03 23:58:56 字數 2990 閱讀 9103

## 第乙個星期,先實現乙個基於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...