2017-07-06 118 views
0

我是初學者與網絡編程其實這是我的第一個網絡代碼以往任何時候都落後插座每隔幾秒鐘

我的問題是,我試圖讓簡單的在線遊戲,但遊戲的不斷滯後,當我打開它不是落後在同一臺計算機上的服務器代碼和客戶端代碼

但當我在不同的計算機上打開客戶端代碼,它開始落後於 它工作非常好,幾秒鐘後突然停止工作像一兩秒鐘或更少,那麼它再次回來工作沒有問題,

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

「等等等等等等等等等等等等等...滯後」。科學,請!定義「滯後」。你的測量在哪裏? –

回答

1

看起來你正在用每次循環迭代打開和關閉套接字。

嘗試在循環之前打開套接字,然後在循環退出時關閉套接字。

+0

非常感謝你,先生,那是我的問題,現在它的工作很棒 –

相關問題