我从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();
}
}
}
每次连接时服务器都会更改状态(?状态从运行变为运行?) 然后我得到一个调试消息,其中包含客户端/服务器之间的时间
但我从未收到过数据讯息。这个代码是否适用于某些机器?有什么明显的东西我不见了吗?
感谢。
答案 0 :(得分:3)
问题是在时间连接(自己的消息)和第一条数据消息之间,连接尚未在服务器端完全设置。作为我的证据的黑客,我只是添加了一个短暂的延迟(Thread.Sleep(500))。为了更有效地修复,我计划在客户端发送更多内容之前从服务器实现响应消息。
答案 1 :(得分:2)
如果您打算在连接后立即发送消息,则应在从服务器收到状态更改更新时发送消息,通知您已连接,因为Connect不会阻止也不会阻止后续代码执行如果你还没有建立联系。