2013-01-10 14 views
5

से कनेक्ट नहीं किया जा सकता है मुझे अपने क्लाइंट को मेरे लिंडग्रेन नेटवर्क परीक्षण में अपने सर्वर से कनेक्ट करने में परेशानी हो रही है। मैंने कनेक्ट करने के कई तरीकों का प्रयास किया है लेकिन जब मैं कनेक्ट करने का प्रयास करता हूं तो यह हमेशा बंद हो जाता है। क्षमा करें अगर यह एक व्यापक सवाल है, लेकिन मैं गलत क्या कर रहा हूं?लिडग्रेन नेटवर्क, इसे

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

इसके अलावा, जहां यह अटक जाती है: The console

+0

नमूने आपके लिए काम प्रदान करते हैं? –

+0

हाँ, मैंने अभी चैट नमूना संकलित किया है और यह पूरी तरह से काम करता है। – user1438378

+0

क्या आप serverconfig को हटाने का प्रयास कर सकते हैं। LocalAddress = NetUtility.Resolve ("localhost"); ? –

उत्तर

2

मैं अपने त्रुटि मिली:

अपने void StartClient() में, आप अपने जबकि पाश में message = server.ReadMessage() सेट कर रहे हैं यहाँ मेरी कोड है।

यह वास्तव में message = client.ReadMessage() होना चाहिए।

देर से प्रतिक्रिया के लिए खेद है।

0

समाधान

using System; 
using System.Threading; 
using System.Collections.Generic; 
using Lidgren.Network; 
using System.Net; 

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

    static void Main() 
    { 
     NetPeerConfiguration serverconfig = new NetPeerConfiguration("chat"); 
     serverconfig.Port = 8081; 
     serverconfig.MaximumConnections = 100; 
     server = new NetServer(serverconfig); 
     Thread serverthread = new Thread(StartServer); 
     serverthread.Start(); 





     NetPeerConfiguration clientconfig = new NetPeerConfiguration("chat"); 
     clientconfig.AutoFlushSendQueue = false; 
     client = new NetClient(clientconfig); 
     Thread clientthread = new Thread(StartClient); 
     clientthread.Start(); 
     AcceptConsoleInput(); 

    } 

    static void StartServer() 
    { 
     server.Start(); 
     NetIncomingMessage message; 

     while (true) 
     { 
     message = server.WaitMessage(500); 
     if (message != null) 
     { 
      switch (message.MessageType) 
      { 
      case NetIncomingMessageType.DiscoveryRequest: 
       NetOutgoingMessage response = server.CreateMessage(); 
       response.Write((byte)1); // Do I need to do this? 
       server.SendDiscoveryResponse(response, message.SenderEndPoint); 
       break; 
      case NetIncomingMessageType.DebugMessage: 
       Console.ForegroundColor = ConsoleColor.Cyan; 
       Console.WriteLine("(Server) Debug: " + message.ReadString()); 
       break; 
      case NetIncomingMessageType.StatusChanged: 
       NetConnectionStatus status = (NetConnectionStatus)message.ReadByte(); 

       string reason = message.ReadString(); 
       Console.WriteLine(NetUtility.ToHexString(message.SenderConnection.RemoteUniqueIdentifier) + " " + status + ": " + reason); 

       if (status == NetConnectionStatus.Connected) 
       Console.WriteLine("Remote hail: " + message.SenderConnection.RemoteHailMessage.ReadString()); 
       break; 
      case NetIncomingMessageType.Data: 
       // incoming chat message from a client 
       string chat = message.ReadString(); 


       // broadcast this to all connections, except sender 
       List<NetConnection> all = server.Connections; // get copy 
                  //all.Remove(message.SenderConnection); 
       Console.WriteLine(all + "hello "); 

       NetOutgoingMessage om = server.CreateMessage(); 
       server.SendMessage(om, all, NetDeliveryMethod.ReliableOrdered, 0); 

       break; 
      default: 
       Console.ForegroundColor = ConsoleColor.Cyan; 
       Console.WriteLine("(Server) Unrecognized message type! (" + message.MessageType + ")"); 
       break; 
      } 
     } 
     server.Recycle(message); 
     } 
     Thread.Sleep(1); 
    } 

    static void StartClient() 
    { 
     client.Start(); 
     client.DiscoverLocalPeers(8081); 
     NetOutgoingMessage hail = client.CreateMessage("This is the hail message"); 


     NetIncomingMessage message; 

     while (true) 
     { 
     message = client.WaitMessage(500); 
     if (message != null) { 
     switch (message.MessageType) 
     { 
      case NetIncomingMessageType.DiscoveryResponse: 
       Console.WriteLine("(Client) Got response from server."); 
       client.Connect(message.SenderEndPoint, hail); 
       Console.WriteLine("(Client) Attempting to connect to server..."); 
       break; 

      case NetIncomingMessageType.DebugMessage: 
      Console.WriteLine(message.ReadString()); 
      break; 
      case NetIncomingMessageType.ErrorMessage: 
      Console.WriteLine(message.ReadString()); 
      break; 
      case NetIncomingMessageType.WarningMessage: 
      Console.WriteLine(message.ReadString()); 
      break; 
      case NetIncomingMessageType.VerboseDebugMessage: 
      Console.WriteLine(message.ReadString()); 
      break; 
      case NetIncomingMessageType.Data: 
      string chat = message.ReadString(); 
      break; 
      case NetIncomingMessageType.StatusChanged: 
      NetConnectionStatus status = (NetConnectionStatus)message.ReadByte(); 
      Console.WriteLine(status.ToString()); 
      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)) 
     { 
     NetOutgoingMessage om = client.CreateMessage(input); 
     client.SendMessage(om, NetDeliveryMethod.ReliableSequenced); 
     client.FlushSendQueue(); 
     } 

     AcceptConsoleInput(); 
    } 
    } 
} 

मैं काफी कुछ बदल तो मैं प्रत्येक भाग के लिए परीक्षण कर सकते हैं। मुझे समस्या मिली जो लगभग तुरंत संदेश शून्य हो जाता है। मैंने इसे लगातार जांचने के लिए बदल दिया और यह शून्य होने पर भी जांच कर रहा है।