我正在閱讀一本網絡書籍,並從我已閱讀的TCP協議中瞭解到,它確保數據將被髮送。我想寫一些代碼來做文件傳輸。來說說這個之前,我也是在Python文檔閱讀這樣一段話:TCP能真正保證交付嗎?
「應用程序負責檢查所有數據已經 發送;如果只有部分數據被傳送,應用程序需要 嘗試交付剩餘的數據「
這似乎與我在網絡書中讀到的內容相矛盾。上面的段落說應用程序負責丟失的數據。
我可能誤解,所以我要問一些問題:
1,如果我要檢查數據發送,那麼爲什麼要使用TCP?
2我在網絡書中讀到TCP做數學計算以確保數據在那裏。那爲什麼不使用TCP浪費時間?
3- python文檔沒有指定緩衝區大小。一次發送緩衝區的最大大小是多少?
4我在網絡書中讀到,如果服務器知道客戶端可以接收它,它可以發送的數據量增加 。可以這樣更改 緩衝區的大小是否超過最大值?
這是到目前爲止我的代碼的嘗試:
Server代碼:
import socket
s = socket.socket()
host = socket.gethostname()
port = 3000
s.bind((host,port))
s.listen(1)
c,addr = s.accept()
with open("Filetosend","rb") as File:
data= File.read(1024)
while data:
c.send(data)
data = File.read(1024)
s.close()
客戶端代碼:
import socket
s= socket.socket()
host = socket.gethostname()
port = 3000
s.connect((host,port))
with open("Filetowrite","wb") as File:
data = s.recv(1024)
while data:
File.write(data)
data = s.recv(1024)
s.close()
值得一提的是系統write()調用的行爲,它不保證將發送整個緩衝區。我有強烈的感覺,提到的文件是指這一點。 – ArturFH