我有一个服务器应用程序,它监视客户端在网络中的活动(所有代码都在C#winforms中)。服务器应用程序已具有客户端计算机的IP地址。我想知道如何检查
i)如果客户端在线(即已经打开并使用客户端应用程序)或离线(不使用应用程序)?
ii)是否打开了客户的计算机?
我在网络方面不擅长,在网上搜索了几个小时后却没有得到它。请帮忙!
编辑:我已经在各种关于服务器 - 客户端应用程序的站点中看到了HTTP,TCP,UDP等的提及。它们之间有什么区别?上面应该使用哪一个?
PS:很抱歉有额外的问题。这些问题是相关的,所以我不想发表新帖。
答案 0 :(得分:3)
您可以通过使用各自的IP地址ping每台计算机来检查客户端计算机是否在线。
Ping ping = new Ping();
PingReply pingReply = ping.Send("IP Address");
if(pingReply.Status == IPStatus.Success)
{
//Machine is online
}
检查客户端计算机是否正在使用任何特定应用程序(如果 这些应用程序是由您构建的,可以访问源代码)。 你可以使用WCF inter process communication。基本上你会创造 托管环境中的WCF服务方法和主机。再具体一点 您可以在服务器win表单应用程序中托管此服务。如 您的win表单应用程序正在服务器客户端中运行 安装在各个机器上的应用程序可以调用此方法 发送状态(包括机器的个人IP地址)。所以服务器 应用程序将知道谁正在运行/打开特定的客户端应用程序 在每台机器上。
如果要检查任何其他客户端应用程序的状态,请说 您希望在客户端计算机运行时获取服务器的状态 " XYZ"应用。那么你需要创建一个运行的应用程序 个人客户端机器(Windows服务将是最佳选择)。工作 这个应用程序将检查正在运行的进程 定期查看是否正在运行任何特定的应用程序进程。如果 然后它将调用您的服务器应用程序中托管的WCF发送 状态。
答案 1 :(得分:1)
有几种选择,以下是概念性答案
您的服务器可以在某个列表中维护可用的客户端。在这里,您可以包括特定客户的生存时间(如会话到期)。您的客户端需要向服务器发送定期标志以指示客户端仍在使用该服务,并且当服务器获得此回复时,它可以更新它的列表会话以使其不会过期。
注 - 列表可以是一个小型数据结构,包括客户端IP和上次标记接收时间。然后,您的服务器可以浏览此列表并检查客户端是否过期(假设时间戳超过2分钟,服务器假定客户端未使用该服务/不在线)
另外一个选择是您的服务器可以向客户端发送一个标志并定期收到回复。
简单客户端服务器 -
http://www.codeproject.com/Articles/12286/Simple-Client-server-Interactions-using-C [简单指南] http://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm [多线程]