通过sokect来接收外部的数据包,设计缓存类来管理这部分数据包,然后对缓存的数据做字符串查找,查找的内容位"\r\n\r\n",如果有则认为找到了数据包,对这个数据包做json解析
时间: 2023-05-15 10:07:33 浏览: 89
捕获数据包;数据包解码;以友好的界面显示数据包信息
4星 · 用户满意度95%
你可以使用类似以下的代码来实现:
```python
import socket
import json
class CacheManager:
def __init__(self):
self.cache = ""
def add_data(self, data):
self.cache += data
def find_packet(self):
index = self.cache.find("\r\n\r\n")
if index != -1:
packet = self.cache[:index+4]
self.cache = self.cache[index+4:]
return packet
else:
return None
def parse_packet(self, packet):
try:
json_data = json.loads(packet)
# do something with the json data
except:
print("Failed to parse packet:", packet)
def receive_data():
# create a socket and receive data
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8888))
sock.listen(1)
conn, addr = sock.accept()
print('Connected by', addr)
cache_manager = CacheManager()
while True:
data = conn.recv(1024)
if not data:
break
cache_manager.add_data(data.decode())
packet = cache_manager.find_packet()
while packet:
cache_manager.parse_packet(packet)
packet = cache_manager.find_packet()
conn.close()
receive_data()
```
这个代码使用了一个 `CacheManager` 类来管理接收到的数据包。当有新的数据到达时,它会被添加到缓存中。然后,它会查找缓存中是否有完整的数据包,如果有,则将其提取出来并进行解析。如果没有,则继续等待新的数据到达。
阅读全文