【发布时间】:2021-04-04 07:50:07
【问题描述】:
我正在制作一个游戏,并决定看看我是否可以连接到另一台机器上运行在我机器上的服务器。我在我的机器上编译了代码(使用 pyinstaller),然后尝试在另一台机器上运行它。一开始我工作得很好,但大约 30 秒后,服务器停止向另一台机器发送数据。我查看了日志并看到了
Error client_thread: invalid literal for int() with base 10: b' 69, '。我认为这意味着另一台机器正在发送部分数据,而不是所有数据。这是用于发送数据的客户端代码:
ge = {'position update': [player.id, player.x, player.y, player.flip, player.name, player.been_hit],"mini-update":[hit_player,player.score,start_game]}
data = json.dumps(ge)
try:
self.socket.sendall((f"{len(data):<{HEADER_SIZE}}"+data).encode())
except socket.error as e:
print(e)
这是接收数据的代码:
data = ""
recv_data = conn.recv(bufsize)
if recv_data == b'':
print(f"{player_id} DISCONNECTED")
break
message_length = int(recv_data[:HEADER_SIZE])
data += recv_data.decode()
while True:
if len(data)-HEADER_SIZE >= message_length:
if len(data)-HEADER_SIZE > message_length:
conn.setblocking(0)
while True:
try:
extra_data = conn.recv(bufsize)
if not extra_data:
break
except:
break
conn.setblocking(1)
break
recv_data = conn.recv(bufsize)
data += recv_data.decode()
data = data[HEADER_SIZE:message_length+HEADER_SIZE]
两台机器都在使用 Debian 10。有人知道为什么会这样吗?
【问题讨论】:
标签: python python-3.x sockets networking pygame