我正在學習Python中的socket編程,爲什麼客戶端套接字連接在從服務器接收到所有數據後沒有關閉?
服務器代碼:
import socket
srvsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind(('', 23000))
srvsock.listen(5)
while True:
clisock, (rem_host, rem_port) = srvsock.accept()
print "conection established with host %s and port %s" % (rem_host, rem_port)
while True:
strg = clisock.recv(20)
if not strg:
print 'conection closed'
clisock.close()
break
clisock.send(strg)
客戶端代碼:
import socket
clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clisock.connect(('', 23000))
clisock.send("Hello World rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr dsadsadsa tttttt\n")
while True:
data = clisock.recv(20)
print type(data)
if not data:
clisock.close()
break
print data
我是從客戶端發送數據流服務器同時從服務器接收數據,數據傳輸成功後,服務器不關閉客戶端連接。我錯過任何事情嗎?
此外還有一個快速註釋:協議設計最重要的部分之一是確保協議單元(數據包,數據幀,任何)可以相互分離。您試圖實施一個協議,在該協議中不可能發送「消息結束」檢測,也不會發送「傳輸結束」。 – holdenweb