C# XNA中的Lidgren连接(客户端/服务器)

C# XNA中的Lidgren连接(客户端/服务器),c#,xna,lidgren,C#,Xna,Lidgren,如何在lidgren中发送数据类型消息? 如果我没有弄错的话,手动发送时会得到数据类型吗? 即使我做了这件事,它也不起作用 我觉得有点奇怪的是,即使我得到了连接,client.ServerConnection也总是空的……也许这可能是一些有用的信息 代码如下: class Program { static NetServer server; static NetPeerConfiguration config; static void Main(string[] arg

如何在lidgren中发送数据类型消息? 如果我没有弄错的话,手动发送时会得到数据类型吗? 即使我做了这件事,它也不起作用

我觉得有点奇怪的是,即使我得到了连接,client.ServerConnection也总是空的……也许这可能是一些有用的信息

代码如下:

class Program
{
    static NetServer server;
    static NetPeerConfiguration config;

    static void Main(string[] args)
    {
        //Initialize configuration for server and start the server
        config = new NetPeerConfiguration("chat");
        config.Port = 14242;
        config.LocalAddress = NetUtility.Resolve("localhost");
        config.MaximumConnections = 10;
        config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);

        server = new NetServer(config);

        server.Start();
        Console.WriteLine("Server is up and running!");

        NetIncomingMessage inc;

        Console.WriteLine("Waiting for connections...");
        while (true)
        {
            if ((inc = server.ReadMessage()) != null)
            {

                switch (inc.MessageType)
                {
                    case NetIncomingMessageType.ConnectionApproval:
                        Console.WriteLine("Incomnig LOGIN");
                        inc.SenderConnection.Approve();
                        NetOutgoingMessage outmsg = server.CreateMessage();
                        outmsg.Write("Welcome to my ChatRoom. Please behave, otherwise I'll eat you!");
                        outmsg.Write((byte)PacketType.MESSAGE);
                        server.SendMessage(outmsg, inc.SenderConnection, NetDeliveryMethod.ReliableOrdered, 0);
                        Console.WriteLine("Approved new connection.");
                        break;
                    case NetIncomingMessageType.Data:
                            outmsg = server.CreateMessage(inc.ReadString());
                            server.SendMessage(outmsg, server.Connections, NetDeliveryMethod.ReliableOrdered, 0);
                        break;
                    case NetIncomingMessageType.StatusChanged:
                        Console.WriteLine(inc.SenderConnection.ToString() + " Status Changed To: " + (NetConnectionStatus)inc.SenderConnection.Status);
                        break;

                }
               server.Recycle(inc);
            }

        }
    }
}
}


我已经解决了这个问题。需要在服务器中进行某种更新,以便偶尔发送要发送的消息。为什么?我不知道。。。。
class Program
{
    static NetClient client;

    static string hostip = "localhost";
    static int port = 14242;
    static bool isRunning = true;
    static bool notConnected = true;
    static void Main(string[] args)
    {

        NetPeerConfiguration config = new NetPeerConfiguration("chat");

        client = new NetClient(config);

        client.Start();

        client.Connect("localhost", 14242);

        Console.WriteLine("Client started. Checking for connection approval.");

        if (client.ServerConnection != null) 
        CheckForConnetionApproval();

        while (isRunning)
        {   
            ReadMessages(); 
            GetInputAndSendItToServer();
        }

    }

    private static void ReadMessages()
    {
        NetIncomingMessage inc;

        while ((inc = client.ReadMessage()) != null)
        {
            switch (inc.MessageType)
            {
                case NetIncomingMessageType.Data:
                     Console.WriteLine(inc.ReadString());
                    break;
            }
        }
    }

    private static void CheckForConnetionApproval()
    {
        bool CanStart = false;

        NetIncomingMessage inc;

        while (!CanStart)
        {
            if ((inc = client.ReadMessage()) != null)
            {
                switch (inc.MessageType)
                {
                    case NetIncomingMessageType.Data:
                        Console.WriteLine(inc.ReadString());
                        CanStart = true;
                        break;
                    case NetIncomingMessageType.StatusChanged:
                        Console.WriteLine("Status: " + (NetConnectionStatus)inc.SenderConnection.Status);
                        break;
                    default:
                        //Console.WriteLine(inc.ReadString());
                        break;
                }
            }
        }
    }

    static string text = "";
    private static void GetInputAndSendItToServer()
    {
        ConsoleKeyInfo kinfo = Console.ReadKey();
        while (kinfo.Key != ConsoleKey.Enter)
        {
            text = Console.ReadLine();
        }

        NetOutgoingMessage outmsg = client.CreateMessage(text);
        client.SendMessage(outmsg, NetDeliveryMethod.ReliableOrdered);
    }
}