Python套接字:ValueError:以10为底的int()的文本无效:'';
我正在设置一个简单的服务器和客户端。我在没有连接到服务器的情况下尝试了客户端代码,pygame加载,一切正常。我做了一个额外的步骤,第一个精灵的起始位置由服务器接收,游戏加载,起始位置是它应该是什么。现在,下一步是在接收其他球员的同时,继续发送球员的位置。现在我得到一个错误: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
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()````