python套接字:发送和接收多个对象d

2024-09-26 22:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个多人游戏项目中使用了它的策略,因此我需要在创建客户端和服务器的同时发送多个对象的数据,这对服务器中的一个对象和客户端中的一个对象都有效,但是在我将第二个对象添加到服务器后,第二个对象脚本中出现了错误
例如 服务器有两个对象,我可以访问它们来控制它[“Cube”]和[“server”] 而服务器只有一个名为[“Client”]的对象 问题是当我运行服务器时,然后我控制我的对象引擎在客户端屏幕中交换对象 例如,当我单击向上箭头将[“服务器”]对象移动到在客户端屏幕中移动的[“立方体”]对象时 当我单击w键将[“Cube”]对象移动到在客户端屏幕中移动的[“Server”]对象上时

这是我的客户代码 [“client”]对象在游戏引擎中连接到它

#------------Setup--------------#
from pickle import dumps, loads
from mathutils import Vector
from GameLogic import * 
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle


cont = GameLogic.getCurrentController()
owner = cont.owner
#obj = cont.owner

if not owner['OneTime']:
  ServerIP = GameLogic.IP
  Serverport = 2052
  Clientname = ''
  ClientPort = 2053
  GameLogic.sClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

  GameLogic.sClient.bind((Clientname,ClientPort))
  GameLogic.host = (ServerIP,Serverport)    
  GameLogic.sClient.setblocking(0)
  owner['OneTime'] = 1

PosYou = list(owner.worldPosition)

scene = getCurrentScene()
Cube = scene.objects["Cube"]
Server = scene.objects["Server"]


PosServer = [0,0,0]
PosCube = [0,0,0]
#------------RECEIVE/SEND--------------#    

Data = pickle.dumps((PosYou))

GameLogic.sClient.sendto(Data,GameLogic.host)

try:
    #thefucking proplem
    Data, SRIP = GameLogic.sClient.recvfrom(1024)



    UPData = pickle.loads(Data)
    PosServer = [UPData[0],UPData[1],UPData[2]]
    Server.worldPosition = PosServer 
    Data2, SRIP2 = GameLogic.sClient.recvfrom(1024)
    UPData2 = pickle.loads(Data2)

    PosCube = [UPData2[0],UPData2[1],UPData2[2]]
    Cube.worldPosition = PosCube 




except OSError:
    pass            
#---------------THE-END----------------#

这是我的服务器代码 [“服务器”]对象在游戏引擎中连接到它

#------------Setup--------------#
from GameLogic import * 
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle

from pickle import *
cont = GameLogic.getCurrentController()
owner = cont.owner
#obj = cont.owner

if not owner['OneTime']:
  Host = "localhost"
  ServerPort = 2052
  GameLogic.sServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  GameLogic.sServer.bind((Host,ServerPort)) 
  GameLogic.sServer.setblocking(0)
  owner['OneTime'] = True

PosYou = list(owner.worldPosition)

scene = getCurrentScene()
Client = scene.objects["Client"]
Cube = scene.objects["Cube"]
PosClient = [0,0,0]
PosCube = [0,0,0]
#------------RECEIVE/SEND--------------#

try:
    Data, CLIP = GameLogic.sServer.recvfrom(1024)
    UPData = pickle.loads(Data)
    PosClient = [UPData[0],UPData[1],UPData[2]]
    Client.worldPosition = PosClient 
    Data = pickle.dumps((PosYou))
    GameLogic.sServer.sendto(Data,CLIP)  


except OSError:
    pass
#---------------THE-END----------------#

第二个对象编码[“Cube”]对象,它连接了游戏引擎中的两个对象 当我运行它的时候,我得到了这个错误

File "secondob.py", line 18, in AttributeError: 'module' object has no attribute 'sServer'

#------------Setup--------------#
from GameLogic import * 
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle

from pickle import *
cont2 = GameLogic.getCurrentController()
owner2 = cont2.owner
#obj = cont.owner





GameLogic.sServer.setblocking(0)
PosYou2 = list(owner2.worldPosition)


scene = getCurrentScene()
Client = scene.objects["Client"]
PosClient2 = [0,0,0]
#------------RECEIVE/SEND--------------#

try:

    Data2, CLIP2 = GameLogic.sServer.recvfrom(1024)


    UPData2 = pickle.loads(Data2)
    PosClient2 = [UPData2[0],UPData2[1],UPData2[2]]

    Client.worldPosition = PosClient2     
    Data2 = pickle.dumps((PosYou2))
    GameLogic.sServer.sendto(Data2,CLIP2)  
except OSError:
    pass
#---------------THE-END----------------#

Tags: 对象fromimport服务器clientdatasocketscene

热门问题