Я учусь использовать сетевую библиотеку Lidgren. Я пытался получить базовый клиентский/установочный сервер, но я получаю ошибку, наложенную на меня. Пока у меня только есть сервер, когда я запускаю его, запуск службы может быть через 10 секунд, а затем сбой, за исключением Lidgren.Network.NetException
. Этого не происходит, если я удаляю первый цикл while
, который предназначен для проверки сообщений. Дополнительная информация об исключении такова: Additional information: Trying to read past the buffer size - likely caused by mismatching Write/Reads, different size or order.
Проблемы с сетью, можно решить с помощью метода async?
Может ли кто-нибудь мне помочь? Кроме того, возможно, я могу избежать этого, пытаясь прочитать сообщения асинхронно и как я могу это сделать, если так?
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();
}
}
}