c# - 将枚举转换为字节并发送它们 lidgren
问题描述
我有这个代码来接收消息:
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);
}
如果消息到达服务器,它只会调用默认值并断开用户连接。
解决方案
创建消息时,您在 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);
}
推荐阅读
- flutter - Flutter Hot Reload 不适用于模拟器。如何删除开发工具?
- priority-web-sdk - 优先级 REST:我的 GET 请求得到 http 响应 200,但内部没有实际数据
- ansible - 使用 Ansible 分子测试 Acme.sh
- express - 无法将数据发布到 Google Cloud Run
- powershell - 有没有其他方法可以使用soap api从servicenow获取记录?
- python - SyntaxError:调用“打印”时缺少括号。你的意思是 print('Making request to: ' + url) 吗?无印刷
- javascript - 通过 webpack 导入时,引导工具提示不适用于 jquery.slim
- javascript - $.each 中的 setTimeout
- r - 如何在 R 中对单词进行排序并删除变量的重复项?
- cuda - CUDA 向右求和