我想要简单的脚本客户端套接字。我的代码如下:为什么我的客户端套接字在首次发送后死亡?
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上的大红色框。 –