【问题标题】:Casting enums to bytes and sending them lidgren将枚举转换为字节并发送它们 lidgren
【发布时间】:2018-08-26 15:21:51
【问题描述】:

我有这个接收消息的代码:

private void DataMessage(NetIncomingMessage msg)
{
    NetOutgoingMessage outmsg = server.CreateMessage();
    DataType data = (DataType)msg.ReadByte();
    switch (data)
    {
        case DataType.DATATYPEMSG:
            string s = msg.ReadString();
            Console.WriteLine(s);
            outmsg.Write(s);
            outmsg.Write((byte)DataType.DATATYPEMSG);
            server.SendToAll(outmsg,NetDeliveryMethod.ReliableUnordered);
            break;
        case DataType.DATATYPEOTHER:
            outmsg.Write((byte)DataType.DATATYPEMSG);
            outmsg.Write("please try this again later");
            server.SendMessage(outmsg,msg.SenderConnection,NetDeliveryMethod.ReliableUnordered);
                break;
        case DataType.DATATYPEREQUEST:
            break;
        default: msg.SenderConnection.Disconnect("if you believe you where wrongly picked up for editing the code please contact the developer");
            break;
    }
}

以及发送它们的代码:

internal void sendmsg(string v)
{
    NetOutgoingMessage outmsg = tclient.CreateMessage(v);
    outmsg.Write((byte)DataType.DATATYPEMSG);
    tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}

如果消息到达服务器,它只会调用默认值并断开用户连接。

【问题讨论】:

  • 枚举是如何定义的?它的价值是什么?调试开关/机箱时收到什么值?
  • 请提供您的枚举
  • 枚举为:enum DataType { DATATYPEMSG = 0, DATATYPEREQUEST = 1, DATATYPEOTHER = 3 }

标签: c# lidgren


【解决方案1】:

当您创建消息时,您将消息文本写在 DataType 之前,但是当您收到消息时,您希望 DataType 出现在文本之前。

您可以通过在文本前写入 DataType 来修复它,如下所示:

internal void sendmsg(string v)
{
    NetOutgoingMessage outmsg = tclient.CreateMessage();
    outmsg.Write((byte)DataType.DATATYPEMSG);
    outmsg.Write(v);
    tclient.SendMessage(outmsg, NetDeliveryMethod.ReliableUnordered);
}

【讨论】:

  • 虽然我应用了你的方法,但稍微相反,现在可以了:)
【解决方案2】:

我变了 NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); switch (data) { case DataType.DATATYPEMSG: string s = msg.ReadString(); 到: NetOutgoingMessage outmsg = server.CreateMessage(); DataType data = (DataType)msg.ReadByte(); string s = msg.ReadString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2020-08-21
    • 2021-01-04
    • 2021-01-11
    相关资源
    最近更新 更多