0

我有一个纸牌游戏程序,到目前为止,聊天在主机和客户端之间的 TCPClient 流上来回运行良好。我想通过序列化和反序列化来做到这一点,这样我也可以在主机和客户端之间传递卡片。我试图为卡片的传递创建一个单独的 TCPClient 流,但它不起作用,并且认为保留一个获取文本消息和卡片的 TCPClient 流可能更容易。所以我创建了一个类,称为谷物,它具有卡片的属性,可以帮助我从另一端的嵌入式卡片数据库重建卡片。有没有办法让我的程序弄清楚卡片是否已放入流中,或者它是否' s 只是流中的文本,所以我可以正确地将其反序列化为字符串或谷物?或者我应该在我的谷物类中添加一个字符串属性,并且在反序列化为谷物后填充该属性时,我会知道它只是文本(如果反序列化后该字段为空,我会知道它是一张卡片)?我在想一个 try catch,它试图反序列化为一个字符串,如果它失败了,它会捕获并转换为谷物。或者我只是远离基地,应该选择另一条路线?我正在使用 Visual Studio 2011,正在使用二进制格式化程序,并且是序列化/反序列化的新手。如果它失败了,它将捕获并作为谷物投射。或者我只是远离基地,应该选择另一条路线?我正在使用 Visual Studio 2011,正在使用二进制格式化程序,并且是序列化/反序列化的新手。如果它失败了,它将捕获并作为谷物投射。或者我只是远离基地,应该选择另一条路线?我正在使用 Visual Studio 2011,正在使用二进制格式化程序,并且是序列化/反序列化的新手。

4

2 回答 2

1

这应该适合你。通过网络发送 BaseMessage,然后检查输入的类型。

命名空间 ConsoleApplication3 { 类程序 { 静态无效 Main(string[] args) { BaseMessage bm = new CardMessage(); if (bm.GetType() == typeof(CardMessage)) { } } }

class BaseMessage : ISerializable
{
}

class ChatMessage : BaseMessage
{
}

class CardMessage : BaseMessage
{
}

}

于 2012-11-24T23:25:34.203 回答
0

最终创建了一个可序列化的容器类。如果我将文本发送到另一台计算机,我将容器的文本属性设置为任何文本。那么当接收到这个容器时,如果它有文本,接收计算机就会显示文本。如果接收到的容器包含一张卡片,它将创建卡片并根据在接收到的容器中找到的其他属性将其放置在需要去的地方。如果是弃牌,则根据容器中的附加属性找到该牌,并将其弃到正确的牌堆中。我还在容器中包含了一个命令作为字符串属性,所以如果所有其他属性都为假,它将查看命令属性是否具有字符串。如果是,则调用命令接收方法并找到正确的命令并执行代码。到目前为止效果很好。

于 2013-01-09T19:25:01.693 回答