首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过tcp或套接字发送类型化对象

通过tcp或套接字发送类型化对象
EN

Stack Overflow用户
提问于 2013-02-22 05:27:01
回答 4查看 47.5K关注 0票数 15

我在为我用Xna制作的一个非常简单的游戏创建网络界面时遇到了问题。我只需要通过TCP客户端/套接字发送对象。我有一个叫“Player”的类。在每个播放器中,都有一个字段名为“Info”,类型为“PlayerInfo”。在客户端/服务器端,我需要将每个玩家的信息发送给除了发送它的那个客户端之外的每个客户端(显然)。这是一个简单的例子,但我需要用大约5- 10个对象,加上发送球员更新(位置,动作…)有没有使用TCP / Sock实现这一点的简单方法?注意:我认为我在C#和编程方面的知识得分为6/10,所以如果你有一个解决方案,你不需要解释所有的东西(例如:变量和字段有什么区别)。我还了解接口、库和…等提前感谢!

EN

Stack Overflow用户

发布于 2013-02-22 06:38:58

我个人的快速清理解决方案,使用JSON.NET:

代码语言:javascript
复制
class JMessage
{
    public Type Type { get; set; }
    public JToken Value { get; set; }

    public static JMessage FromValue<T>(T value)
    {
        return new JMessage { Type = typeof(T), Value = JToken.FromObject(value) };
    }

    public static string Serialize(JMessage message)
    {
        return JToken.FromObject(message).ToString();
    }

    public static JMessage Deserialize(string data)
    {
        return JToken.Parse(data).ToObject<JMessage>();
    }
}

现在你可以像这样序列化你的对象:

代码语言:javascript
复制
Player player = ...;
Enemy enemy = ...;
string data1 = JMessage.Serialize(JMessage.FromValue(player));
string data2 = JMessage.Serialize(JMessage.FromValue(enemy));

通过线路发送数据,然后在另一端,您可以执行以下操作:

代码语言:javascript
复制
string data = ...;
JMessage message = JMessage.Deserialize(data);
if (message.Type == typeof(Player))
{
    Player player = message.Value.ToObject<Player>();
}
else if (message.Type == typeof(Enemy))
{
    Enemy enemy = message.Value.ToObject<Enemy>();
}
//etc...
票数 11
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15012549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档