2015-03-19 4 views
0

Я учусь использовать сетевую библиотеку 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(); 
     } 
    } 
} 

ответ

0

Эта ошибка обычно означает, что вы не читаете одни и те же типы данных в том же порядке, в каком вы их отправили. Похоже, что приведенный выше код читает строку - что вы отправляете? Кроме того, вы должны вызвать server.Shutdown() при выходе из цикла.

Смежные вопросы