网络问题,可以用异步方法解决?

时间:2015-03-19 16:47:22

标签: c# networking asynchronous console-application lidgren

我正在学习使用网络库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.

任何人都可以帮我吗? 此外,我是否可以通过尝试异步读取消息来避免这种情况,如果是这样我将如何做到这一点?

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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

该错误通常意味着您没有按照发送它们的相同顺序读取相同的数据类型。看起来上面的代码读取一个字符串 - 你发送什么?此外,您应该在退出循环时调用server.Shutdown()。