Python套接字:ValueError:以10为底的int()的文本无效:'';

Python套接字:ValueError:以10为底的int()的文本无效:'';,python,sockets,pygame,Python,Sockets,Pygame,我正在设置一个简单的服务器和客户端。我在没有连接到服务器的情况下尝试了客户端代码,pygame加载,一切正常。我做了一个额外的步骤,第一个精灵的起始位置由服务器接收,游戏加载,起始位置是它应该是什么。现在,下一步是在接收其他球员的同时,继续发送球员的位置。现在我得到一个错误: File "test.py", line 89, in <module> p2Pos = read_pos(send_package(make_pos((sprite1.x, s

我正在设置一个简单的服务器和客户端。我在没有连接到服务器的情况下尝试了客户端代码,pygame加载,一切正常。我做了一个额外的步骤,第一个精灵的起始位置由服务器接收,游戏加载,起始位置是它应该是什么。现在,下一步是在接收其他球员的同时,继续发送球员的位置。现在我得到一个错误:

  File "test.py", line 89, in <module>
    p2Pos = read_pos(send_package(make_pos((sprite1.x, sprite1.y))))
  File "test.py", line 50, in read_pos
    return int(str[0]), int(str[1])
ValueError: invalid literal for int() with base 10: ''
test.py(客户端):

将pygame导入为pg
导入套接字
def connect():
尝试:
client.connect(addr)
返回client.recv(2048.decode())
除:
通过
def发送包(数据):
尝试:
client.sendall(str.encode(数据))
返回client.recv(2048.decode())
除socket.error外,错误为e:
打印(e)
def get_pos():
keys=pg.key.get_pressed()
如果键[pg.K_左]:
sprite1.vx=-0.3
如果键[pg.K_RIGHT]:
sprite1.vx=0.3
如果键[pg.K_UP]:
sprite1.vy=-0.3
如果键[pg.K_DOWN]:
sprite1.vy=0.3
def更新位置()
sprite1.x+=sprite1.vx
sprite1.y+=sprite1.vy
sprite1.vx,sprite1.vy=0,0
sprite1.rect=pg.rect(sprite1.x,sprite1.y,75,75)
def update_other():
sprite2.rect=pg.rect(sprite2.x,sprite2.y,75,75)
def stop_unboud():
如果sprite1.x<0:
sprite1.x=0
如果sprite1.y<0:
sprite1.y=0
如果sprite1.x>724:
sprite1.x=724
如果sprite1.y>524:
sprite1.y=524
def读取位置(str):
str=str.split(“,”)
返回int(str[0]),int(str[1])
def制造位置(tup):
返回str(tup[0])+“,”+str(tup[1])
client=socket.socket(socket.AF\u INET,socket.SOCK\u流)
server=“127.0.0.1”
端口=2300
地址=(服务器,端口)
pos=读取位置(connect())
第init页()
窗口=pg.display.set_模式((800600))
sprite1=pg.sprite.sprite()
sprite1.image=pg.Surface((75,75))
sprite1.image.fill((255,0,0))
sprite1.x=pos[0]
sprite1.y=位置[1]
sprite1.vx,sprite1.vy=0,0
sprite1.rect=pg.rect(sprite1.x,sprite1.y,75,75)
sprite2=pg.sprite.sprite()
sprite2.image=pg.Surface((75,75))
sprite2.image.fill((255,0,0))
sprite2.x=200
sprite2.y=200
sprite2.vx,sprite2.vy=0,0
sprite2.rect=pg.rect(sprite2.x,sprite2.y,75,75)
all_group=pg.sprite.group([sprite1,sprite2])
运行=真
运行时:
对于pg.event.get()中的事件:
如果event.type==pg.QUIT:
运行=错误
p2Pos=读取位置(发送包(生成位置((sprite1.x,sprite1.y)))
sprite2.x=p2Pos[0]
sprite2.y=p2Pos[1]
更新_其他()
get_pos()
停止_unboud()
更新_pos()
窗口填充(0)
所有组绘制(窗口)
pg.display.flip()
第页退出
退出()````

找到了问题。在移动sprite时,我将sprite1.x和sprite1.y更改为小数点,因此不发送int,而是很可能发送double/float值。因此,我将精灵移动的速度从0.3更改为1,现在我没有收到此错误消息。

str[0]
str[1]
.Hmm之间有一个
'
,所以它包含长度为零的字符?这不意味着它什么也没有收到吗?可能,请检查代码中可能传递给strFound的
'
,谢谢您的帮助!:)很高兴你找到了!
import threading
import sys

server = "127.0.0.1"
port = 2300

pos = [(0, 0), (200, 200)]
playerr = 0

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind((server, port))
except socket.error as e:
    str(e)

s.listen(2)
print("Waiting for a connection, Server Started")
sys.stdout.flush()

def read_pos(str):
    str = str.split(",")
    return int(str[0]), int(str[1])


def make_pos(tup):
    return str(tup[0]) + "," + str(tup[1])

def threaded_client(conn, player):
    conn.sendall(str.encode(make_pos(pos[player])))
    reply = ""
    while True:
        try:
            data = read_pos(conn.recv(2048).decode())
            pos[player] = data
            if not data:
                print("Disconnected")
                break
            else:
                if player == 0:
                    reply = pos[1]
                else:
                    reply = pos[0]
                print("Received: ", data)
                print("Sending : ", reply)
                

            conn.sendall(str.encode(make_pos(reply)))
        except:
            break

    print("Lost connection")
    conn.close()

while True:
    conn, addr = s.accept()
    print("Connected to:", addr)

    t = threading.Thread(target=threaded_client, args=(conn, playerr))
    t.start()
    playerr += 1
import pygame as pg
import socket

def connect():
    try:
        client.connect(addr)
        return client.recv(2048).decode()
    except:
        pass

def send_package(data):
    try:
        client.sendall(str.encode(data))
        return client.recv(2048).decode()
    except socket.error as e:
        print(e)

def get_pos():
    keys = pg.key.get_pressed()
    if keys[pg.K_LEFT]:
        sprite1.vx = -0.3
    if keys[pg.K_RIGHT]:
        sprite1.vx = 0.3
    if keys[pg.K_UP]:
        sprite1.vy = -0.3
    if keys[pg.K_DOWN]:
        sprite1.vy = 0.3

def update_pos():
    sprite1.x += sprite1.vx
    sprite1.y += sprite1.vy
    sprite1.vx, sprite1.vy = 0, 0
    sprite1.rect = pg.Rect(sprite1.x, sprite1.y, 75, 75)

def update_other():
    sprite2.rect = pg.Rect(sprite2.x, sprite2.y, 75, 75)

def stop_unboud():
    if sprite1.x < 0:
        sprite1.x = 0
    if sprite1.y < 0:
        sprite1.y = 0
    if sprite1.x > 724:
        sprite1.x = 724
    if sprite1.y > 524:
        sprite1.y = 524

def read_pos(str):
    str = str.split(",")
    return int(str[0]), int(str[1])

def make_pos(tup):
    return str(tup[0]) + "," + str(tup[1])


client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = "127.0.0.1"
port = 2300
addr = (server, port)
pos = read_pos(connect())

pg.init()
window = pg.display.set_mode((800, 600))
sprite1 = pg.sprite.Sprite()
sprite1.image = pg.Surface((75, 75))
sprite1.image.fill((255, 0, 0))
sprite1.x = pos[0]
sprite1.y = pos[1]
sprite1.vx, sprite1.vy = 0,0
sprite1.rect = pg.Rect(sprite1.x, sprite1.y, 75, 75)

sprite2 = pg.sprite.Sprite()
sprite2.image = pg.Surface((75, 75))
sprite2.image.fill((255, 0, 0))
sprite2.x = 200
sprite2.y = 200
sprite2.vx, sprite2.vy = 0,0
sprite2.rect = pg.Rect(sprite2.x, sprite2.y, 75, 75)


all_group = pg.sprite.Group([sprite1, sprite2])

run = True
while run:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False

    p2Pos = read_pos(send_package(make_pos((sprite1.x, sprite1.y))))
    sprite2.x = p2Pos[0]
    sprite2.y = p2Pos[1]
    update_other()

    get_pos()
    stop_unboud()
    update_pos()


    window.fill(0)
    all_group.draw(window)
    pg.display.flip()

pg.quit()
exit()````