我正在尝试学习 C# 中的套接字,并决定创建一个多人游戏进行练习。虽然我在套接字发送方面已经取得了很大进展,但我遇到了一个奇怪的问题,即在从另一个客户端接收并反序列化我的类后,布尔值总是变为真。
问题出现在这里:
void OnDataReceived(object sender, ConnectionEventArgs e)
{
Connection con = (Connection)e.SyncResult.AsyncState;
Game.ScoreBoard[currentPlayer] = Serializer.ToScoreCard(con.buffer); //Here
...
}
Game.ScoreBoard[currentPlayer].Local总是为真,我完全不确定问题出在哪里。其他值似乎工作正常。Connection 是一个包含 IP、套接字和管理连接等的类。缓冲区大小当前为 30 000,因为我尝试扩大它以确保这不是问题。
以下是课堂上的相关信息:
public ScoreCard(SerializationInfo info, StreamingContext context)
{
name = (string)info.GetValue("Name", typeof(string));
played = (bool[])info.GetValue("Played", typeof(bool[]));
scores = (int[])info.GetValue("Scores", typeof(int[]));
bonusScore = (int)info.GetValue("bonusScore", typeof(int));
local = (bool)info.GetValue("Local", typeof(bool));
}
和
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Scores", scores, typeof(int[]));
info.AddValue("Played", played, typeof(bool[]));
info.AddValue("Name", name, typeof(string));
info.AddValue("bonusScore", bonusScore, typeof(int));
info.AddValue("Local", local, typeof(bool));
}
这是序列化程序类:
static class Serializer
{
public static byte[] ToArray(object data)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
b.Serialize(stream, data);
return stream.ToArray();
}
public static ScoreCard ToScoreCard(byte[] data)
{
ScoreCard sc;
MemoryStream stream = new MemoryStream(data);
BinaryFormatter b = new BinaryFormatter();
sc = (ScoreCard)b.Deserialize(stream);
return sc;
}
}
我不知道该怎么做,或者即使提供的信息足以让您解决我的问题。如有必要,我可以提供更多信息。我只是觉得奇怪的是,似乎只有那个布尔值无法正常工作。
编辑:我发现了问题,像往常一样,这是一个简单的愚蠢错误。哦,好吧,我至少学会了制作自己的二进制格式化程序。多谢你们 :)