C# XNA中的Lidgren连接(客户端/服务器)
如何在lidgren中发送数据类型消息? 如果我没有弄错的话,手动发送时会得到数据类型吗? 即使我做了这件事,它也不起作用 我觉得有点奇怪的是,即使我得到了连接,client.ServerConnection也总是空的……也许这可能是一些有用的信息 代码如下: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
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);
}
}