因此,我正在尝试搜索与从客户端接收到的数据匹配的字典,但是无法找到它。
这是我的服务器端代码:
import socket
irTable = {"a1" : "lamp", "a2" : "tv", "b1" : "lamp2", "b2" : "tv2"}
HOST = socket.gethostname()
PORT = 12345
BUFFER = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address:', addr)
while 1:
data = str(conn.recv(BUFFER).decode())
if not data: break
print("received data:", data)
for i in irTable:
if data in irTable:
print("Found it!")
else:
print("Hmm... not there!")
conn.close()
和客户端:
import socket
IP = socket.gethostname()
PORT = 12345
BUFFER = 1024
MSG = "a1"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, PORT))
s.send(MSG.encode())
s.close()
因此,目前的客户端仅将“a1”作为数据发送到服务器,因此
if data in irTable:
应该意味着
if "a1" in irTable:
但是它永远不会在表中找到a1甚至知道它在那里...我所得到的是:
>>>
Connection address: ('192.168.0.2', 58271)
received data: a1
Hmm... not there!
Hmm... not there!
Hmm... not there!
Hmm... not there!
我在这里做错了什么?
谢谢
最佳答案
问题是您发现数据后通过不中断循环来覆盖数据。因此,数据被分配给a1
,再次循环并被分配为空。以下服务器代码可以按预期工作。
import socket
irTable = {"a1" : "lamp", "a2" : "tv", "b1" : "lamp2", "b2" : "tv2"}
HOST = socket.gethostname()
PORT = 12345
BUFFER = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connection address:', addr)
data = None
while not data:
data = str(conn.recv(BUFFER).decode())
for i in irTable:
if data in irTable:
print("Found it!")
else:
print("Hmm... not there!")
conn.close()
使用while 1的另一种方式可能是:
while 1:
data = str(conn.recv(BUFFER).decode())
if data:
break
关于python - Python套接字,数据和字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27494765/