現在チャットサーバーとして機能しているプログラムがあります。対戦相手とコミュニケーションをとるためのチャットボックスを備えたターン制のカードゲームです。チャットはすべて接続を介して機能しますが、特定のカードを対戦相手に送信し始める必要があるところまで来ています。これにより、カードをプレイしたときに、対戦相手がそのカードを画面に表示します。クライアントコンピュータがオブジェクトまたはオブジェクトのコレクションを受信し、そのプロパティに基づいてカードタイプが何であるかを把握し、カードを正しい場所に配置するようにします。送信と受信の部分は、私がどのように達成するかを理解していないものです。私が読んだことから、これにはシリアル化が必要であり、これをどこから始めればよいのかわかりません。手伝ってください!VisualStudioを使用しています。
質問する
40 次
1 に答える
0
自分の質問にもう一度答えます...文字列としてcardTypeを、intとしてcardidを含むcardcontainerという新しいクラスを作成することになりました。カードコンテナには他にもプロパティがあるので、カードの行き先がわかります。次に、カードコンテナ(次のコードでは「cc」)をシリアル化し、次のように送信しました。
Dim cc as new CardContainer
cc.id = card.id
cc.cardType = card.GetType.ToString
cc.discard = true
Dim bf As New BinaryFormatter
Dim ms As New MemoryStream
Dim b() As Byte
'serializes to the created memory stream
bf.Serialize(ms, cc)
'converts the memory stream to the byte array
b = ms.ToArray()
ms.Close()
'sends the byte array to client or host
SyncLock mobjClient.GetStream
mobjClient.GetStream.Write(b, 0, b.Length)
End SyncLock
クライアントはTCPClientで何かをリッスンし、次のコードでカードを取得します。
Dim intCount As Integer
Try
SyncLock mobjClient.GetStream
'returns the number of bytes to know how many to read
intCount = mobjClient.GetStream.EndRead(ar)
End SyncLock
'if no bytes then we are disconnected
If intCount < 1 Then
MarkAsDisconnected()
Exit Sub
End If
Dim bf As New BinaryFormatter
Dim cc As New CardContainer
'moves the byte array found in arData to the memory stream
Dim ms As New MemoryStream(arData)
'cuts off the byte array in the memory stream after all the received data
ms.SetLength(intCount)
'the new cardContainer will now be just like the sent one
cc = bf.Deserialize(ms)
ms.Close()
'starts the listener again
mobjClient.GetStream.BeginRead(arData, 0, 3145728, AddressOf DoRead, Nothing)
カードコンテナが持っているデータに応じて、クライアントが現在呼び出すメソッドを決定します。たとえば、これを受信すると、作成されたccがCardReceivedメソッドに渡され、CardReceivedメソッドに一連のif、elseifステートメントが含まれます。それらの1つは
ElseIf cc.discard = true then
'makes a new card from the id and cardType properties
dim temp as new object = MakeCard
'discard method will find the correct card in the Host's known hand and discard it to the correct pile
Discard(temp)
于 2013-01-09T19:18:34.830 に答える