0

トピック自体から、IPアドレスを介してデバイスを検出するにはどうすればよいですか。私がそれを検出すると、デバイスはサーバーに、新しいデバイスを検出するのと同じように接続されているという応答を送信しますが、デバイスはLinuxマシンに接続されていません。ここで私は写真を手に入れました..

ここに画像の説明を入力

デバイスが接続されると、IPアドレスを介してデータを送信できるので、制御できます..デバイスは、Linuxがコマンドを送信するモーターとLEDライトで構成されます。モーターの場合は上に移動、下に移動、左、右、LED ライトのオン/オフなどのコマンド。

どうすればcでできますか?

4

4 に答える 4

0

これは便利なチュートリアルであることがわかりました。

linuxhowtos.org/C_C++/socket.htm

それは実際にあなたがソケットプログラミングを始めるために知りたいかもしれないすべてをカバーし、よく書かれています。

于 2012-10-10T07:31:56.787 に答える
0

リモート デバイスに関するデータを取得するには、さまざまな方法があります。

  1. ソケット
  2. SNMP プロトコル
  3. nmap ツール

ソケット プログラミングは、リモート システムに接続し、それに関するデータを取得するための一般的な方法です。

プロトコル SNMP の場合、次のライブラリを使用してプログラミングで動作させます。

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

nmap ツールについては、次のリンクを使用できます

http://nmap.org/

お役に立てれば。

于 2012-10-10T08:49:36.687 に答える
0

デバイスが応答すると、IP アドレスが取得されます。あなたの検出メカニズムは、UDP でのブロードキャストのようなものだと思います。Berkeley ソケットを使用している場合は、次の 2 つの関数のいずれかを使用します。

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)];
};
于 2012-10-10T07:25:22.243 に答える
0

デバイスのホスト名がわかっている場合は、gethostbynameを使用できます。これにより、探している (IP アドレス) 必要なデータを含むhostent構造体が返されます。

そこから、TCP 接続の確立や UDP パッケージの送信などに進むことができます。

乾杯

于 2012-10-10T07:26:04.057 に答える