Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 插座每隔几秒钟滞后一次_Python_Sockets_Pygame - Fatal编程技术网

Python 插座每隔几秒钟滞后一次

Python 插座每隔几秒钟滞后一次,python,sockets,pygame,Python,Sockets,Pygame,我是网络编程的初学者实际上这是我的第一个网络代码 我的问题是我试图制作一个简单的在线游戏,但当我在同一台计算机上打开服务器代码和客户端代码时,游戏一直滞后,而不是滞后 但是当我在不同的计算机上打开客户端代码时,它开始滞后 它在几秒钟内工作得非常好,然后突然停止工作一、两秒钟或更少,然后又恢复工作,没有任何问题 在试图找出延迟发生的位置后,看起来它同时发生在服务器和客户端上,并且它们也同时恢复工作 在搜索解决方案后,虽然我没有发现任何适合我的解决方案,但我发现大多数解决方案都是针对更高级的问题,但

我是网络编程的初学者实际上这是我的第一个网络代码

我的问题是我试图制作一个简单的在线游戏,但当我在同一台计算机上打开服务器代码和客户端代码时,游戏一直滞后,而不是滞后

但是当我在不同的计算机上打开客户端代码时,它开始滞后 它在几秒钟内工作得非常好,然后突然停止工作一、两秒钟或更少,然后又恢复工作,没有任何问题

在试图找出延迟发生的位置后,看起来它同时发生在服务器和客户端上,并且它们也同时恢复工作

在搜索解决方案后,虽然我没有发现任何适合我的解决方案,但我发现大多数解决方案都是针对更高级的问题,但我发现我应该使用“PodSixNet”进行在线游戏,而不是socket,但我仍将尝试使用socket,以下是我的代码:

服务器:

import socket,pygame,os,sys 
from pygame.locals import*
os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (0,30)
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
serverSocket.bind((socket.gethostbyname(socket.gethostname()), 23000)) 
serverSocket.listen(1)
screen=pygame.display.set_mode((250,250))
pygame.init()
clock = pygame.time.Clock()
WHITE = (250, 250, 250)
x=0
y=0
chx=0
chy=0
while True:
        screen.fill((0,0,0))
        for event in pygame.event.get():
            if event.type == QUIT :
                pygame.quit()
                quit()
        clientSocket, (remoteHost, remotePort) = serverSocket.accept()
        rec = clientSocket.recv(100)
        clientSocket.close()
        chx=rec[0]
        chy=rec[1] 
        if rec[0]==2:
                chx=-1
        if rec[1]==2:
                chy=-1
        x+=chx
        y+=chy 
        pygame.draw.rect(screen, WHITE, (x,y,10,10))
        pygame.display.update()
        clock.tick_busy_loop(60)
客户:

import socket,pygame
from pygame.locals import*
screen=pygame.display.set_mode((250,250))
pygame.init()
clock=pygame.time.Clock()
WHITE = (250, 250, 250)
chx=0
chy=0
x=0
y=0
chxx=0
chyy=0
while True:
        screen.fill((0,0,0))
        for event in pygame.event.get():
            if event.type == QUIT :
                pygame.quit()
                quit()
            if event.type == KEYDOWN:
                    if event.key==K_w:
                        chy=2
                    if event.key==K_d: 
                        chx=1
                    if event.key==K_s:
                        chy=1
                    if event.key==K_a:
                        chx=2
            if event.type==KEYUP:
                    if event.key==K_w or event.key==K_s:
                        chy=0
                    if event.key==K_d or event.key==K_a:
                        chx=0
        clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        clientSocket.connect(('192.168.0.112', 23000))
        clientSocket.send(bytearray([chx,chy]))
        clientSocket.close()
        chxx=chx
        chyy=chy
        if chx==2:
                chxx=-1
        if chy==2:
                chyy=-1
        x+=chxx
        y+=chyy
        pygame.draw.rect(screen, WHITE, (x,y,10,10))
        pygame.display.update()
        clock.tick_busy_loop(60)
我知道代码中有很多懒惰和错误的东西,因为这不是我将在游戏中使用的代码


在这段代码中,我只是想让在线工作不落后

它看起来像是在每次循环迭代中打开和关闭套接字


尝试在循环之前打开插座,然后在循环退出时关闭插座。

非常感谢您,先生,是的,这是我的问题,现在它工作得很好