我目前正在使用UDP协议在客户端/服务器架构的C#中创建一个小应用程序。这是一个代码,最终将用于将在Windows窗体应用程序中制作的2D游戏。
现在,由于UDP是无连接的,所以当用户连接时,我就这样做了,他用专门的消息将他的名字发送到服务器,当服务器收到加入消息时,他将客户端添加到字符串列表中。 / p>
现在,问题是,我不知道如何断开客户端。
当然,如果客户端点击Disconnect按钮,我可以这样做,它会向服务器发送一条消息,断开他的连接。
但是,如果他只是点击“X”退出应用程序,或者他的电量耗尽了怎么办?
我想过制作Keep-Alive数据包,但我想不出有效的方法。
这是服务器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace UDP_Server
{
class Program
{
Socket _serverSocket;
List<string> clients;
static void Main(string[] args)
{
Program go = new Program();
go.Server();
}
void Server()
{
byte[] msg = new byte[1024];
_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
_serverSocket.Bind(new IPEndPoint(IPAddress.Any, 12345));
while (true)
{
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
int recv = _serverSocket.ReceiveFrom(msg, ref Remote);
string data = Encoding.ASCII.GetString(msg);
if (data.Contains("Name!"))
{
clients.Add(data.Split('!')[1]);
}
else Console.WriteLine("Message received from {0}:", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(msg));
//_serverSocket.SendTo(msg, Remote);
}
}
}
}
不需要客户端代码,因为它唯一要做的就是使用SendTo方法将数据报发送到服务器,以及获取数据的接收方法。
那么我怎样才能建立一个保持活力的架构呢?另外,如果我不仅仅是为了这个人,我应该使用多线程吗?
答案 0 :(得分:0)
我无法回答您的具体问题,但是WCF可以选择吗?
我不确定你的应用程序具体是什么,但是WCF在连接“ful”和连接“less”场景中消除了很多麻烦。
WCF客户端可以连接和断开连接,并且服务器能够处理多个用户,即使有或没有“多线程”,正如您所说。希望这会有所帮助。