插座每隔几秒钟
问题描述:
我是初学者与网络编程其实这是我的第一个网络代码以往任何时候都落后插座每隔几秒钟
我的问题是,我试图让简单的在线游戏,但游戏的不断滞后,当我打开它不是落后在同一台计算机上的服务器代码和客户端代码
但当我在不同的计算机上打开客户端代码,它开始落后于 它工作非常好,几秒钟后突然停止工作像一两秒钟或更少,那么它再次回来工作没有问题,
af ter试图找出滞后发生的地方,它看起来像在同一时间在服务器和客户端上发生,并且他们同时返回工作
搜索解决方案后,虽然我没有发现任何工作对我来说,只要我发现的大多数解决方案是更先进的问题,但我发现我应该使用“PodSixNet”的网络游戏,而不是套接字,但我仍然会尝试使用套接字,这里是我的代码:
服务器:
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)
,我知道有很多的懒惰和错误的东西上的代码的,因为这不是我的代码将在游戏中使用,
在该代码IAM只是试图让线上与合作out lagging
答
看起来你正在用每次循环迭代打开和关闭套接字。
尝试在循环之前打开套接字,然后在循环退出时关闭套接字。
+0
非常感谢你,先生,那是我的问题,现在它的工作很棒 –
“等等等等等等等等等等等等等...滞后”。科学,请!定义“滞后”。你的测量在哪里? –