windows 检查程序是否正在本地网络上运行

2admgd59  于 2023-02-10  发布在  Windows
关注(0)|答案(1)|浏览(207)

我想用c++编写一个简单的程序,使用tcp套接字与局域网中另一台计算机上的相同程序通信。为了创建tcp套接字,我可以让用户编写ip和端口来建立连接。但我还需要能够在局域网中自动检测是否有任何计算机也在运行该程序。
我的想法是:

  • 当程序自动检测局域网中的可用连接时,它将通过UDP向所有IP发送消息到特定端口,同时它还将保持监听端口等待最终应答。
  • 当另一台计算机上的程序被打开用于LAN连接时,在另一台计算机试图检测的情况下,它将保持监听A端口,然后它还将经由UDP发送通知连接可能性的响应消息。

所有的安全系统是另一个问题,我现在不需要答案。

// Client 1:
// Search for all ips in local network
// create udp socket
// send check message
// thread function listening for answers
// if device found than show to menu
// continue searching process

// Client 2 (host) :
// user enable lan connection
// create udp socket
// thread function listening for detection requests
// if request structure is right send back identification message
// continue listening for request

我的问题是--有没有更有效或更标准的方法来做这样的事情?

2uluyalo

2uluyalo1#

测试另一台计算机是否在监听给定的端口是黑客们整天都在做的事情,试图接管世界...
但是,在编写您所描述的软件时,您需要指定IP和端口信息。例如,如果您正在实现打印机,则需要搜索并自动查找设备。在这种情况下,如Hero所建议的,您可以使用广播。但是,在这种情况下,您使用UDP(因为TCP不支持该功能)。
一端的软件必须有一个服务器,在TCP术语中,这意味着一个listen()调用,然后是一个accept(),直到连接实现。
另一端的客户端可以尝试connect(),如果连接成功,则另一端的软件已启动并正在运行。
如果您需要两者都能够尝试连接,那么两者都必须实现客户端和服务器(如果您使用ppoll() [或旧的select() ],您知道哪个事件正在发生并可以对其进行操作,而不需要线程或fork(),则这是可行的)。
在我这边,我编写了eventdispatcher library来做所有这些事情。我还希望许多计算机之间能够相互通信,因此我有一种RPC服务形式,我称之为communicatord。此服务同时是客户端和服务器。它侦听端口并尝试连接到其他系统。如果其他系统的IP地址较低,则将其视为服务器。否则,它被视为客户端,我在发送GOSSIP消息后断开连接。这样,客户端(较大的IP地址)可以依次连接到服务器。此 communicator 服务允许我的所有其他服务进行通信,而不必一次又一次地重新实现计算机之间的通信层。

相关问题