从主题本身,我如何通过其 IP 地址检测设备。当我检测到它时,设备将向服务器发送一个响应,表明它现在已连接,就像检测到新设备一样,但该设备未连接到 linux 机器。我这里有图。。
当设备现在连接时,我可以通过它的 IP 地址向它发送数据,以便我可以控制它.. 该设备将由电机、LED 灯组成,Linux 将向它们发送命令。命令,如..向上移动,向下移动,向左,向右移动电机和开/关 LED 灯。
我怎么能在c中做到这一点?
There are many ways to get the data about a remote device.
Socket programming is the generic way to connect to a remote system and getting the data about it.
For the protocol SNMP use the following library to work it in programming.
For the nmap tool you can use following link
Hope this helps.
当您的设备回话时,您将获得一个 IP 地址。我假设您的检测机制类似于在 UDP 上广播。如果您使用 Berkeley 套接字,您将使用以下两个函数之一:
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); // TCP method of receiving connection
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); // UDP method of receiving data
在这些中,cliaddr
和src_addr
分别会给你发送数据包的计算机的IP。例如在 linux 上,用于 IPv4 的 sockaddr 结构是:
/* Internet address. */
struct in_addr {
__be32 s_addr;
};
struct sockaddr_in {
__kernel_sa_family_t sin_family; /* Address family */
__be16 sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
如果您知道设备的主机名,则可以使用gethostbyname,它会返回一个包含所需数据的hostent结构,您正在寻找(IP 地址)。
从那里您可以继续建立 TCP 连接或发送 UDP 包等...
干杯