我有一个树莓派运行着一个服务器,与我笔记本电脑上的服务器进行通信。我是通过Python的简单套接字连接来实现这一点的。
像这样:
服务器
HOST = "192.168.0.115"
PORT = 5001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)
conn, addr = s.accept()
while conn:
data = conn.recv(1024)
print data
if not data:
break
conn.close()
客户端
__init__(self,addr,port,timeout):
self.addr = addr
self.port = port
self.timeout = timeout
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.addr,self.port))
#in a different file the call to send is made, passes list object as a parameter
send(self,data):
if self.socket:
self.socket.send(str(data))
在客户端代码中设置一个打印语句会输出期望的结果(x,y,z)。但是,在服务器上接收数据时,它呈现出一种模式:
(x,y,z)(x,y,z)
(x,y,z)
(x,y,z)
(x,y,z)(x,y,z)
...
为什么数据会被接收为重复的?这是TCP的属性吗?如果是,我该如何解决这个问题,以便像最初发送的字符串一样只接收一次数据。