C# 网络问题,是否可以用异步方法解决?
我正在学习使用网络图书馆Lidgren。我试图让一个基本的客户机/安装服务器运行,但是我遇到了一个错误。到目前为止,我只有服务器,当我运行它时,服务可能运行10秒,然后崩溃,出现异常C# 网络问题,是否可以用异步方法解决?,c#,networking,asynchronous,console-application,lidgren,C#,Networking,Asynchronous,Console Application,Lidgren,我正在学习使用网络图书馆Lidgren。我试图让一个基本的客户机/安装服务器运行,但是我遇到了一个错误。到目前为止,我只有服务器,当我运行它时,服务可能运行10秒,然后崩溃,出现异常Lidgren.Network.NetException。如果我删除了第一个while循环,则不会发生这种情况,该循环用于不断检查消息。有关异常的附加信息如下:附加信息:尝试读取超过缓冲区大小-可能是由于写入/读取不匹配、大小或顺序不同造成的。 有人能帮我吗? 另外,我是否可能通过尝试异步读取消息来避免这种情况,如果
Lidgren.Network.NetException
。如果我删除了第一个while
循环,则不会发生这种情况,该循环用于不断检查消息。有关异常的附加信息如下:附加信息:尝试读取超过缓冲区大小-可能是由于写入/读取不匹配、大小或顺序不同造成的。
有人能帮我吗?
另外,我是否可能通过尝试异步读取消息来避免这种情况,如果是这样,我将如何做到
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Lidgren.Network;
namespace ConsoleApplication3
{
class Program
{
private static void Main(string[] args)
{
NetPeerConfiguration config = new NetPeerConfiguration("MyExampleName");
config.Port = 14242;
NetServer server = new NetServer(config);
server.Start();
Console.WriteLine("Server Started...");
bool listen = true;
while (listen)
{
NetIncomingMessage msg;
while ((msg = server.ReadMessage()) != null)
{
Console.WriteLine("Started Listening...");
switch (msg.MessageType)
{
case NetIncomingMessageType.VerboseDebugMessage:
case NetIncomingMessageType.DebugMessage:
case NetIncomingMessageType.WarningMessage:
case NetIncomingMessageType.Data:
if (msg.ReadString() == "bye")
{
listen = false;
}
else
{
Console.WriteLine(msg.ReadString());
}
break;
case NetIncomingMessageType.ErrorMessage:
Console.WriteLine(msg.ReadString());
break;
default:
Console.WriteLine("Unhandled type: " + msg.MessageType);
break;
}
server.Recycle(msg);
}
}
Console.WriteLine("Finished Listening!");
Console.ReadLine();
}
}
}
该错误通常意味着您没有按照发送数据类型的顺序读取相同的数据类型。看起来上面的代码读取了一个字符串-您发送了什么?另外,在退出循环时,应该调用server.Shutdown()