2013-08-27 2 views
0

Я награбленных последнее издание Lidgren из https://code.google.com/p/lidgren-network-gen3/Lidgren не отправка/прием сообщений данных

Я рассмотрел много учебников, но никто не похоже на работу. Я полагаю, что я должен что-то пропускать в своем коде.

using Lidgren.Network; 
using System; 
namespace LGServer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      NetPeerConfiguration config = new NetPeerConfiguration("test"); 
      config.Port = 5432; 
      config.LocalAddress = new System.Net.IPAddress(new byte[] { 127, 0, 0, 1 }); 
      config.MaximumConnections = 1000; 
      NetServer server = new NetServer(config); 
      server.Start(); 
      NetIncomingMessage msg = null; 
      while (true) 
      { 
       while ((msg = server.ReadMessage()) != null) 
       { 

        Console.WriteLine(msg.MessageType.ToString()); 
        if (msg.MessageType == NetIncomingMessageType.Data) 
        { 
         Console.WriteLine(msg.ReadInt16()); 
         Console.WriteLine(msg.ReadString()); 
        } 
       } 
      } 
     } 
    } 
} 
//// My client code: 
using Lidgren.Network; 
using System; 
namespace LGClient 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      NetPeerConfiguration config = new NetPeerConfiguration("test"); 
      NetClient client = new NetClient(config); 
      client.Start(); 
      client.Connect("127.0.0.1", 5432); 
      NetOutgoingMessage msg = client.CreateMessage(); 
      msg.Write((Int16)3346); 
      msg.Write("Test Message 1 whooahaa"); 
      client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered); 
      client.FlushSendQueue(); 
     } 
    } 
} 

Сервер получает изменение состояния каждый раз, когда я соединяюсь (? Изменения состояния от запуска до запуска?) Тогда я получаю сообщение отладки с временем, которое требуется от клиента/сервера

Но я никогда получить сообщение данных. этот код работает на ком-нибудь машине elses? есть ли что-то очевидное, что мне не хватает?

Спасибо.

+0

Я нашел проблему, но я не понимаю, почему это проблема. Просто добавив «Thread.Sleep (500);» сразу после подключения клиента (перед отправкой сообщения данных) он работает нормально. Я не вижу, как помогает задержка. Это, по сути, время, необходимое серверу lidgren для регистрации соединения для утверждения сообщений? –

ответ

2

Проблема заключается в том, что между соединением времени (само сообщение) и первым сообщением данных соединение не было полностью настроено на стороне сервера. Как взломать мое доказательство, я просто добавил небольшую задержку (Thread.Sleep (500)). Для более эффективного исправления я планирую реализовать ответное сообщение с сервера до отправки клиентом большего количества.

1

Если вы намерены отправить сообщение, как только вы подключаетесь, вы должны отправить свое сообщение, когда вы получаете обновление статуса change с сервера, которое уведомляет вас о том, что вы подключены, поскольку Connect не блокирует и не предотвращает выполнение последующего кода if вы еще не установили соединение.

+0

Это очень хороший способ улучшить исходный протокол установления связи. –

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