0

私はカードゲームプログラムを持っていますが、これまでのところ、チャットはホストとクライアントの間のTCPClientストリームを介してうまく機能します。ホストとクライアント間でカードを渡すこともできるように、シリアル化と逆シリアル化を使用してこれを実行したいと思います。カードを渡すために別のTCPClientストリームを作成しようとしましたが、機能せず、テキストメッセージとカードを取得する1つのTCPClientストリームを保持する方が簡単であると考えました。そこで、シリアルと呼ばれるクラスを作成しました。このクラスには、カードのプロパティがあり、もう一方の端にあるカードの埋め込みデータベースからカードを再構築するのに役立ちます。カードがストリームに入れられたかどうか、またはカードがストリームに入れられたかどうかをプログラムに認識させる方法はありますか?ストリーム内のテキストだけなので、文字列またはシリアルに適切に逆シリアル化できますか?または、シリアルクラスに文字列プロパティを追加する必要があります。シリアルに逆シリアル化した後にそのプロパティが入力されると、それは単なるテキストであることがわかります(逆シリアル化後にそのフィールドが空の場合は、カードであることがわかります)。文字列に逆シリアル化しようとするtrycatchを考えています。失敗した場合は、キャッチしてシリアルとしてキャストします。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。それが失敗した場合、それは穀物として捕らえられ、投げられます。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。それが失敗した場合、それは穀物として捕らえられ、投げられます。それとも、私はこれでベースから離れて、別のルートを選択する必要がありますか?Visual Studio 2011を使用していて、binaryformatterを使用していて、シリアル化/逆シリアル化を初めて使用しています。

4

2 に答える 2

1

これはあなたのために働くはずです。有線でBaseMessageを送信してから、どのタイプが入ったかを確認します。

名前空間ConsoleApplication3{クラスプログラム{staticvoidMain(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

シリアル化可能なコンテナクラスを作成することになりました。他のコンピューターにテキストを送信する場合は、コンテナーのtextプロパティをテキストに設定します。次に、このコンテナが受信されたときに、テキストが含まれている場合、受信側のコンピュータはテキストを表示します。受け取ったコンテナにカードが含まれている場合、カードが作成され、受け取ったコンテナで見つかった追加のプロパティに基づいて、必要な場所に配置されます。廃棄の場合は、コンテナ内の追加のプロパティに基づいてカードを見つけ、正しい山に廃棄します。また、コンテナに文字列プロパティとしてコマンドを含めたので、他のすべてのプロパティがfalseの場合、コマンドプロパティに文字列があるかどうかが確認されます。その場合、コマンド受信メソッドを呼び出し、正しいコマンドを見つけてコードを実行します。これまでのところうまく機能します。

于 2013-01-09T19:25:01.693 に答える