0

从主题本身,我如何通过其 IP 地址检测设备。当我检测到它时,设备将向服务器发送一个响应,表明它现在已连接,就像检测到新设备一样,但该设备未连接到 linux 机器。我这里有图。。

在此处输入图像描述

当设备现在连接时,我可以通过它的 IP 地址向它发送数据,以便我可以控制它.. 该设备将由电机、LED 灯组成,Linux 将向它们发送命令。命令,如..向上移动,向下移动,向左,向右移动电机和开/关 LED 灯。

我怎么能在c中做到这一点?

4

4 回答 4

0

There are many ways to get the data about a remote device.

  1. SOCKET
  2. SNMP protocol
  3. nmap tool

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.

http://www.net-snmp.org/

For the nmap tool you can use following link

http://nmap.org/

Hope this helps.

于 2012-10-10T08:49:36.687 回答
0

当您的设备回话时,您将获得一个 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

在这些中,cliaddrsrc_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)];
};
于 2012-10-10T07:25:22.243 回答
0

如果您知道设备的主机名,则可以使用gethostbyname,它会返回一个包含所需数据的hostent结构,您正在寻找(IP 地址)。

从那里您可以继续建立 TCP 连接或发送 UDP 包等...

干杯

于 2012-10-10T07:26:04.057 回答
0

我发现这是一个有用的教程:

linuxhowtos.org/C_C++/socket.htm

它实际上涵盖了所有你可能想知道的套接字编程入门并且写得很好。

于 2012-10-10T07:31:56.787 回答