1 回答

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
客戶端將圖像數(shù)據(jù)發(fā)送到服務(wù)器,但它不會執(zhí)行任何操作來通知服務(wù)器所有圖像數(shù)據(jù)都已發(fā)送。由于服務(wù)器不知道已收到完整的圖像,因此仍在等待更多數(shù)據(jù)到達(dá)。這意味著服務(wù)器永遠(yuǎn)不會到達(dá)調(diào)用,這意味著客戶端將永遠(yuǎn)等待永遠(yuǎn)不會到達(dá)的數(shù)據(jù),因?yàn)樗鼜奈幢话l(fā)送過。client_socket.recv
client_socket.sendall
its client_socket.recv
當(dāng)你從客戶端中刪除和跟隨的行時(shí),它的工作原理是,因?yàn)檫@可以讓客戶端進(jìn)程到達(dá)程序的末尾并退出。當(dāng)客戶端退出時(shí),它將關(guān)閉,并斷開與服務(wù)器的連接。連接斷開會導(dǎo)致服務(wù)器返回,但沒有數(shù)據(jù),這會將服務(wù)器中斷循環(huán),并允許它繼續(xù)保存之前接收的數(shù)據(jù),然后處理圖像文件。client_socket.recv
client_socket
client_socket.recv
while True
要修復(fù)此問題,請?jiān)诳蛻舳苏{(diào)用中執(zhí)行以下操作:
client_socket.shutdown(socket.SHUT_WR)
發(fā)送完所有圖像數(shù)據(jù)后。它可以在內(nèi)部循環(huán)之前,也可以在 旁邊,這無關(guān)緊要。break
while(1)
my_stream.close
這將告訴服務(wù)器不會再有數(shù)據(jù)從客戶端到達(dá),但它仍然允許套接字沿服務(wù)器到客戶端方向傳輸數(shù)據(jù)。這將允許客戶端收集服務(wù)器的響應(yīng)。pred
添加回答
舉報(bào)