Lidgren网络,无法让它连接

use*_*378 5 c# networking

我无法让我的客户端在我的lindgren网络测试中连接到我的服务器.我尝试了多种连接方式,但是当我尝试连接时它总是停止.对不起,如果这是一个广泛的问题,但我做错了什么?这是我的代码:

class Program
{
    static NetPeerConfiguration serverconfig;
    static NetPeerConfiguration clientconfig;
    static NetServer server;
    static NetClient client;

    static void Main()
    {
        Console.Title = "LidgrenNetworkTest";
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("LidgrenNetworkTest console initialized.");
        Console.ForegroundColor = ConsoleColor.Gray;
        Console.Write("Color codes: ");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.Write("System ");
        Console.ForegroundColor = ConsoleColor.Gray;
        Console.Write("Input ");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write("Sent ");
        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.Write("Received");
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("\n");

        Console.WriteLine("Configuring server...");
        serverconfig = new NetPeerConfiguration("LidgrenNetworkTest");
        serverconfig.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
        serverconfig.EnableMessageType(NetIncomingMessageType.DiscoveryRequest);
        serverconfig.LocalAddress = NetUtility.Resolve("localhost");
        serverconfig.Port = 8080;
        Console.WriteLine("Server configured.");

        Console.WriteLine("Configuring client...");
        clientconfig = new NetPeerConfiguration("LidgrenNetworkTest");
        clientconfig.EnableMessageType(NetIncomingMessageType.DiscoveryResponse);
        Console.WriteLine("Client configured.");

        Console.WriteLine("Initializing server...");
        server = new NetServer(serverconfig);
        server.Start();
        Console.WriteLine("Server initialized.");

        Console.WriteLine("Initializing client...");
        client = new NetClient(clientconfig);
        client.Start();
        Console.WriteLine("Client initialized.");

        Thread serverthread = new Thread(StartServer);
        serverthread.Start();

        StartClient();

        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Connecting client to server...");
        //client.Connect(new IPEndPoint(NetUtility.Resolve("localhost"), 8080));
        client.DiscoverLocalPeers(8080);

        AcceptConsoleInput();
    }

    static void StartServer()
    {
        NetIncomingMessage message;

        while ((message = server.ReadMessage()) != null)
        {
            switch (message.MessageType)
            {
                case NetIncomingMessageType.DiscoveryRequest:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Server) Got request from client.");
                    NetOutgoingMessage response = server.CreateMessage();
                    response.Write((byte)1); // Do I need to do this?
                    server.SendDiscoveryResponse(response, message.SenderEndPoint);
                    break;
                case NetIncomingMessageType.ConnectionApproval:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Server) Connection accepted.");
                    message.SenderConnection.Approve();
                    break;
                case NetIncomingMessageType.DebugMessage:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Server) Debug: " + message.ReadString());
                    break;
                default:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Server) Unrecognized message type! (" + message.MessageType + ")");
                    break;
            }
            server.Recycle(message);
        }
    }

    static void StartClient()
    {
        NetIncomingMessage message;

        while ((message = server.ReadMessage()) != null)
        {
            switch (message.MessageType)
            {
                case NetIncomingMessageType.DiscoveryResponse:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Client) Got response from server.");
                    client.Connect(message.SenderEndPoint);
                    Console.WriteLine("(Client) Attempting to connect to server...");
                    break;
                case NetIncomingMessageType.DebugMessage:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Client) Debug: " + message.ReadString());
                    break;
                default:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("(Client) Unrecognized message type! (" + message.MessageType + ")");
                    break; 
            }
            client.Recycle(message);
        }
    }

    static void AcceptConsoleInput()
    {
        string input = Console.ReadLine();

        if (!string.IsNullOrWhiteSpace(input))
        {
            // Send input from client to server.
        }

        AcceptConsoleInput();
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,它陷入困境: 控制台

小智 2

我发现你的错误:

在您的 中void StartClient(),您正在设置message = server.ReadMessage()while 循环。

这其实应该是message = client.ReadMessage()

回复晚了非常抱歉。