使用udp崩溃和延迟的python客户端游戏

使用udp崩溃和延迟的python客户端游戏,python,server,pygame,udp,Python,Server,Pygame,Udp,我正在尝试制作一个具有多个大厅作为进程的python udp游戏服务器 以下是服务器的代码: 导入套接字 导入多进程 def新建休息室(端口、addr1、addr2): 导入套接字 导入队列 导入线程 地址1=addr1 地址2=addr2 本地_ip=“” 本地端口=端口 缓冲区大小=1024 打印(端口) sock=socket.socket(family=socket.AF_INET,type=socket.sock_DGRAM) sock.bind((本地ip、本地端口)) sock.s

我正在尝试制作一个具有多个大厅作为进程的python udp游戏服务器

以下是服务器的代码:

导入套接字
导入多进程
def新建休息室(端口、addr1、addr2):
导入套接字
导入队列
导入线程
地址1=addr1
地址2=addr2
本地_ip=“”
本地端口=端口
缓冲区大小=1024
打印(端口)
sock=socket.socket(family=socket.AF_INET,type=socket.sock_DGRAM)
sock.bind((本地ip、本地端口))
sock.settimeout(10)
运行=真
q=队列。队列(10000)
打印(“在线程之前”)
def侦听(sock):
运行=真
缓冲区大小=1024
运行时:
尝试:
数据地址=sock.recvfrom(缓冲区大小)
除socket.timeout外:
运行=错误
q、 put(数据地址)
def发送(sock,地址1,地址2):
尽管如此:
数据地址=q.get()
如果数据地址[1]==地址1:
sock.sendto(数据地址[0],地址2)
其他:
sock.sendto(数据地址[0],地址1)
thread1=threading.Thread(target=listen,args=(sock,))
thread2=threading.Thread(target=send,args=(sock,address1,address2))
thread1.start()
thread2.start()
thread1.join()
thread2.join()
本地_ip=“”
本地_端口=10001
缓冲区大小=1024
服务器消息=“已连接”
字节\服务器\消息=str.encode(服务器\消息)
sock=socket.socket(family=socket.AF_INET,type=socket.sock_DGRAM)
sock.bind((本地ip、本地端口))
大厅=[]
端口计数=10002
check_alive=False
尽管如此:
消息,地址=sock.recvfrom(缓冲区大小)
消息=消息解码(“utf-8”)
打印(地址,“,消息)
如果地址不在大厅:
大厅.附加(地址)
如果len(大厅)==2:
p=multiprocess.Process(target=new_lobble,args=(端口计数,lobble[0],lobble[1]))
p、 开始()
端口=str(端口计数)
port=port.encode()
大堂地址:
打印(地址)
sock.sendto(端口、地址)
端口计数+=1
大厅=[]
check_alive=True
如果check_处于活动状态:
打印(p.is_alive())
以下是我制作的测试客户端的代码:

导入pygame
导入套接字
导入json
导入队列
导入线程
导入系统
#f=查找大厅
pygame.init()
类连接():
定义初始化(自):
self.msgFromClient=“f”
self.bytesToSend=str.encode(self.msgFromClient)
self.serverAddressPort=(“”,10001)
self.bufferSize=10000
self.sock=socket.socket(family=socket.AF_INET,type=socket.sock_DGRAM)
self.sock.sendto(self.bytesToSend、self.serverAddressPort)
self.msgFromServer=self.sock.recvfrom(self.bufferSize)
self.msg=self.msgFromServer[0]
self.port=self.msg.decode(“utf-8”)
self.port=int(self.port)
self.serverAddressPort=(“”,self.port)
self.q_listen=queue.queue(1000)
self.q_send=queue.queue(1000)
def侦听(套接字、缓冲区大小):
运行=真
运行时:
数据地址=sock.recvfrom(缓冲区大小)
数据=数据地址[0]。解码(“utf-8”)
data=json.load(数据)
self.q_listen.put(数据)
def发送(sock、服务器地址端口):
运行=真
运行时:
data=self.q_send.get()
如果数据:
data=json.dumps(数据)
数据=字节(数据“utf-8”)
sock.sendto(数据,服务器地址端口)
sock=self.sock
buffer\u size=self.bufferSize
serverAddressPort=self.serverAddressPort
self.thread=threading.thread(target=listen,args=(sock,buffer\u size,)
self.thread2=threading.Thread(target=send,args=(sock,serverAddressPort))
self.thread.daemon=True
self.thread2.daemon=True
self.thread.start()
self.thread2.start()
将全局变量导入为g
#de sters,o sa fie在主游戏中初始化
g、 screen=pygame.display.set_模式([1800900])
职业玩家(pygame.sprite.sprite):
定义初始化(自身,颜色):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.size=60
self.image=pygame.Surface((self.size,self.size))
self.image.fill(颜色)
self.rect=self.image.get_rect()
self.rect.center=(400400)
def Blit(自身,屏幕):
screen.blit(self.image,self.rect)
类测试\游戏():
定义初始化(自):
g、 变量_初始化()
self.surface\u size=g.surface\u size
self.surface=pygame.surface((self.surface\u size,self.surface\u size))
self.surface\u rect=self.surface.get\u rect()
self.surface_rect.center=(800450)
self.running=True
self.player=player(g.brown)
self.player2=玩家(绿色)
self.connection=connection()
def Blit_图像(自):
g、 屏幕填充(g.白色)
自表面填充(g.黑色)
self.player.Blit(self.surface)
self.player2.Blit(self.surface)
g、 screen.blit(self.surface,self.surface_-rect)
pygame.display.flip()
def更新(自我):
dt=克钟刻度(60)/1000
pos=pygame.mouse.get_pos()
self.player.rect.centerx=位置[0]-400
self.player.rect.centery=位置[1]-50
coord=(self.player.rect.centerx,self.player.rect.centery)
self.connection.q_send.put(协调)
self.player2.rect.center=self.connection.q_listen.get()
def检查_事件(自):
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
sys.exit()
D
import pygame
def variables_initialization():
    global clock
    global dt
    global screen
    global surface_size
    global white
    global black
    global green
    global brown
    global gray
    clock = pygame.time.Clock()
    dt = 0
    surface_size = 800
    white = (250, 250, 250)
    black = (0, 0, 0)
    green = (115, 198, 0)
    brown = (102, 51, 0)
    gray = (215, 218, 218)