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 套接字和pygame_Python_Sockets_Pygame - Fatal编程技术网

Python 套接字和pygame

Python 套接字和pygame,python,sockets,pygame,Python,Sockets,Pygame,我试图写一个简单的游戏,但每次我启动它,Pygame崩溃 以下是客户端代码: import socket, pygame, sys port = 5000 host_server = "localhost" client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host_server, port)) pygame.init() FPS = 30 fpsClock = pyg

我试图写一个简单的游戏,但每次我启动它,Pygame崩溃

以下是客户端代码:

import socket, pygame, sys
port = 5000
host_server = "localhost"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host_server, port))
pygame.init()
FPS = 30
fpsClock = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')
WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
dogImg = pygame.image.load('dog.png')
catx = 0
caty = 0
dogx = 0
dogy = 0
while True:
    tasto = pygame.key.get_pressed()
    DISPLAYSURF.fill(WHITE)
    dogx = client_socket.recv(1024)
    client_socket.send(str(catx))
    if tasto[K_RIGHT]:
        catx += 5
    elif tasto[K_DOWN]:
        caty += 5
    elif tasto[K_LEFT]:
        catx -= 5
    elif tasto[K_UP]:
    caty -= 5
    DISPLAYSURF.blit(catImg, (catx, caty))
    DISPLAYSURF.blit(dogImg, (dogx, dogy))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()
    fpsClock.tick(FPS)
以下是服务器代码:

import pygame, sys, socket
from pygame.locals import *
host = "localhost"
port = 5000
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(5)
pygame.init()
FPS = 30
fpsClock = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')
WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
dogImg = pygame.image.load('dog.png')
catx = 0
caty = 0
dogx = 0
dogy = 0
while True:
    client_socket, address = server_socket.accept()
    tasto = pygame.key.get_pressed()
    DISPLAYSURF.fill(WHITE)
    dogx = client_socket.recv(1024)
    client_socket.send(catx)
    if tasto[K_RIGHT]:
        catx += 5
    elif tasto[K_DOWN]:
        caty += 5
    elif tasto[K_LEFT]:
        catx -= 5
    elif tasto[K_UP]:
        caty -= 5
    DISPLAYSURF.blit(catImg, (catx, caty))
    DISPLAYSURF.blit(dogImg, (dogx, dogy))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()
    fpsClock.tick(FPS)

我知道代码看起来有点混乱,但我是python新手,我希望你能解释一下我的错误。问题可能出在
recv
大小上,但正如我所说的,我是Python新手,所以我想请您向我解释一下如何计算消息的字节数(如果这是问题)。

您遇到了什么样的崩溃?是否有堆栈跟踪,或者它只是挂起


我能理解挂起,因为您的服务器和客户端都开始通过
recv
调用进行通信,该调用永远不会返回(从未发送过任何消息)。

您遇到了什么样的崩溃?是否有堆栈跟踪,或者它只是挂起


我能理解挂起,因为您的服务器和客户端都开始通过
recv
调用进行通信,该调用永远不会返回(从未发送过任何消息)。

您遇到了什么样的崩溃?是否有堆栈跟踪,或者它只是挂起


我能理解挂起,因为您的服务器和客户端都开始通过
recv
调用进行通信,该调用永远不会返回(从未发送过任何消息)。

您遇到了什么样的崩溃?是否有堆栈跟踪,或者它只是挂起


我能理解挂起,因为您的服务器和客户端都开始与
recv
呼叫通信,该呼叫从未返回(从未发送过任何消息)。

我将向您介绍
http://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data
。阅读标有绿色复选标记的已接受答案。
recv(1024)
功能很可能是您的问题。务必记住,您创建的套接字执行所谓的阻塞。这意味着,如果调用
dogx=client_socket.recv(1024)
,但没有数据传输到套接字,则函数将永远等待,直到一些数据传输到套接字。另一个问题是缓冲区大小。您的代码似乎没有问题,但如果您试图向套接字发送大量数据,则必须多次调用
client\u socket.recv(1024)
才能获取整个数据字符串。参考我发布的链接


希望这有帮助!祝你好运

我将向您推荐
http://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data
。阅读标有绿色复选标记的已接受答案。
recv(1024)
功能很可能是您的问题。务必记住,您创建的套接字执行所谓的阻塞。这意味着,如果调用
dogx=client_socket.recv(1024)
,但没有数据传输到套接字,则函数将永远等待,直到一些数据传输到套接字。另一个问题是缓冲区大小。您的代码似乎没有问题,但如果您试图向套接字发送大量数据,则必须多次调用
client\u socket.recv(1024)
才能获取整个数据字符串。参考我发布的链接


希望这有帮助!祝你好运

我将向您推荐
http://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data
。阅读标有绿色复选标记的已接受答案。
recv(1024)
功能很可能是您的问题。务必记住,您创建的套接字执行所谓的阻塞。这意味着,如果调用
dogx=client_socket.recv(1024)
,但没有数据传输到套接字,则函数将永远等待,直到一些数据传输到套接字。另一个问题是缓冲区大小。您的代码似乎没有问题,但如果您试图向套接字发送大量数据,则必须多次调用
client\u socket.recv(1024)
才能获取整个数据字符串。参考我发布的链接


希望这有帮助!祝你好运

我将向您推荐
http://stackoverflow.com/questions/17667903/python-socket-receive-large-amount-of-data
。阅读标有绿色复选标记的已接受答案。
recv(1024)
功能很可能是您的问题。务必记住,您创建的套接字执行所谓的阻塞。这意味着,如果调用
dogx=client_socket.recv(1024)
,但没有数据传输到套接字,则函数将永远等待,直到一些数据传输到套接字。另一个问题是缓冲区大小。您的代码似乎没有问题,但如果您试图向套接字发送大量数据,则必须多次调用
client\u socket.recv(1024)
才能获取整个数据字符串。参考我发布的链接


希望这有帮助!祝你好运

它给了我一个黑屏,它给了我一个黑屏,它给了我一个黑屏,它给了我一个黑屏,它崩溃了