1

我一直在玩 XNA,想尝试让游戏在 LAN 上运行,但事实证明,要做到这一点,我需要使用一种叫做远程处理的东西。无论如何,我设法让它工作

    public class TestObject : MarshalByRefObject
{
    int testInt;

    public Level()
    {
        this.testInt = 5.Zero;
    }


    public int GetNumber()
    {
        return testInt;
    }
}

我的服务器频道 = new TcpChannel(4444); ChannelServices.RegisterChannel(channel, false);

        Type type = Type.GetType("Domain.Level,Domain");

        RemotingConfiguration.RegisterWellKnownServiceType(type,
            "FirstRemote",
            WellKnownObjectMode.Singleton);

和客户

      this.chanel = new TcpChannel();
      ChannelServices.RegisterChannel(chanel, false);
      this.testObject = (TestObject)Activator.GetObject(typeof(TestObject),
         "tcp://localhost:4444/FirstRemote");

这样就可以了,但是问题是服务器无法访问该对象,并且我无法创建一个带有参数的构造函数,因此无法初始化测试对象上的任何数据。如何制作一个对象,然后让它使用它而不是制作一个新对象?

4

1 回答 1

0

不幸的是,您可能会发现游戏中的实时网络通信比您当前的方向更复杂。大多数游戏使用持久套接字连接在客户端之间来回传递信息,而其他方法通常对于实时网络来说太慢了。

我建议查看 Lidgren 网络库。Lidgren 对网络通信进行了抽象,并使得将数据序列化为非常小且快速的数据包变得更加容易,这些数据包可以通过 UDP 和 TCP 的多种可靠性模式进行传输。你可以在这里找到 Lidgren 项目: http ://code.google.com/p/lidgren-network-gen3/

附带说明一下,在这里阅读虚幻引擎如何建立网络对我来说非常有价值:http: //udn.epicgames.com/Three/NetworkingOverview.html

我写了一篇博客,展示了有关实现客户端/服务器模式的一些具体细节:http: //syndicatex.com/flatredball/flatredball-and-lidgren-multiplayer-networking/

于 2013-01-03T18:20:04.610 回答