我想要簡單的腳本客戶端套接字。我的代碼如下:爲什麼我的客戶端套接字在首次發送後死亡?
import pickle
import socket
pole = ["mail","firewall","fria"]
c=False
while c==False:
try:
client = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
client.connect (('localhost', 1234))
print("established")
c=True
except:
print(".")
i = (len(pole)-1)
while i>=0:
client.send(pickle.dumps(pole[i]))
pole.remove(pole[i])
i-=1
client.close()
另一方面是「永遠」的服務器。但服務器只收到一塊數據。爲什麼沒有所有的領域?客戶端「,而」循環應該運行3次,所以它應該發送所有的([「郵件」,「防火牆」,「弗里亞」))。這裏是服務器的輸出:
然後客戶端結束。爲什麼?客戶應在發送所有數據後結束。爲什麼在一個發送連接關閉後?
感謝您的幫助
編輯---> server.py:
import pickle
import socket
updated_data = []
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.bind (('', 1234))
server.listen (5)
while 1:
channel, details = server.accept()
print ('Received connection:', details [ 0 ])
updated_data.append(pickle.loads(channel.recv(1024)))
print (updated_data)
channel.close()
您的1個send()調用很可能僅由1個recv()調用讀取。請記住,TCP是一個流協議,它不知道或保留任何消息邊界。 – nos
永遠不要在網絡協議中使用泡菜。閱讀http://docs.python.org/2/library/pickle.html上的大紅色框。 –