各位读者下午好,我不熟悉套接字编程,也不熟悉异步编程(我觉得异步可能是解决我问题的一部分),所以请原谅我犯下的任何愚蠢的错误。
首先,我有一个UDP Echo服务器作为游戏服务器。每当它收到ping请求时,它就会将源ip和端口添加到“已连接客户端”列表中,并将该确切的ping发送给列表中除发送者之外的所有人。这工作得相当好,因为它在收到消息时会做出反应,所以它总是可以只监听。然而,客户端的问题是,我需要不断地发送ping,同时也在监听。
这是我的客户端当前的样子:
import socket
from time import sleep
from contextlib import contextmanager
UDP_IP_ADDRESS = "127.0.0.1"
UDP_PORT_NO = 14004
Message = b"Hello World, From Client B"
@contextmanager
def socket_ctx():
""" Context Manager for the socket. Makes sure the socket will close regardless of why it exited."""
my_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Assign IP address and a RANDOM available port number to socket
my_socket.bind(('127.0.0.1', 0))
try:
# Let the rest of the app use the socket and wait for it to finish
yield my_socket
finally:
my_socket.close()
def send_data(client_sock):
client_sock.sendto(Message, (UDP_IP_ADDRESS, UDP_PORT_NO))
def listen(client_sock):
print(client_sock.recvfrom(100))
with socket_ctx() as sock:
while True:
send_data(sock)
listen(sock)
sleep(2)
目前,它只发送一次ping,然后空闲,因为它可能正在侦听。如果碰巧收到了ping,比如说,另一个客户端向服务器发送了一个ping,而服务器将ping发送给了这个客户端,它就会听到它,打印它,然后再次开始循环。问题是,如果没有另一个客户端发送一些东西来使这个客户端脱离侦听,它就不会发送ping。
我认为异步可能是我的解决方案,但我不知道如何去做。有谁有解决这个问题的办法吗?
https://stackoverflow.com/questions/50555713
复制相似问题