inet_pton()およびinet_ntop()関数の説明
int inet_aton(const char *cp, struct in_addr *inp);
inet_aton() 変換
ネットワークホストアドレス
ip (例: 192.168.1.10) を
バイナリ値
と構造体in_addr構造体に格納されている、つまり、第2パラメータ*inp、関数は、非ゼロを返すCPのホストが有効なグランドを持っていることを意味し、戻り値は0は、ホストアドレスが無効であることを意味します。(その
この変換後は、ネットワーク転送には使用できず、ホストのバイトオーダーをネットワークのバイトオーダーに変換するためにhtonsまたはhtonl関数の呼び出しが必要です
)
in_addr_t inet_addr(const char *cp);
inet_addr関数変換 ネットワークホストアドレス (例: 192.168.1.10) から ネットワークバイトオーダーバイナリ値 引数の char *cp が無効な場合、この関数は -1(INADDR_NONE) を返す。また、アドレスが 255.255.255.255 の場合も -1 を返す。255.255.255.255 は有効なアドレスだが inet_addr はこれを扱えないのだ。
2. ネットワークから送信された2進数値をドット付き10進数のipアドレスに変換する
char *inet_ntoa(struct in_addr in);
inet_ntoa機能 ネットワークバイトソートアドレスを変換する を 標準ASCIIドット区切りアドレス この関数はドット区切りの文字列(例えば192.168.1.10)のアドレスへのポインタを返します。そのスペースは静的に割り当てられるので、この関数を2回目に呼ぶと、前の呼び出しが上書きされます(ダブルキャップされる)。
ドット付き10進数のIPを出力するには?次のプログラムを見てみましょう。
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main()
{
struct in_addr addr1,addr2;
ulong l1,l2;
l1 = inet_addr("192.168.0.74");
l2 = inet_addr("211.100.21.179");
memcpy(&addr1, &l1, 4);
memcpy(&addr2, &l2, 4);
printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //note the result of running this sentence
printf("%s\n", inet_ntoa(addr1));
printf("%s\n", inet_ntoa(addr2));
return 0;
}
実際の実行結果は以下の通りです。
192.168.0.74 : 192.168.0.74 // ここでわかるように、printfのinet_ntoaは一度だけ実行されました。
192.168.0.74
211.100.21.179
inet_ntoa は char * を返し、この char * のスペースは inet_ntoa 内で静的に確保されます。 そのため、それ以降にinet_ntoaを呼び出すと、前の呼び出しが上書きされます。最初のprintf文の結果は、printfの変数引数のみを勘定に入れることができます。 値は右から左へ で終わりです。
<スパン
3.
<スパン
ネットワークアドレス変換機能 inet_pton と inet_ntop の追加
この2つの関数はIPv6に付属しており、IPv4とIPv6の両方のアドレスに対して機能します。関数内のpとnはそれぞれプレゼンテーションと数値を表します。アドレスの表現形式は通常ASCII文字列であり、数値形式はソケットのアドレス構造体に格納されるバイナリ値である。
#include <arpe/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr); // convert dotted decimal ip address to numeric format for network transfer
Return value: 1 if successful, 0 if the input is not a valid expression, -1 if there is an error
const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len); //convert numeric format to dotted-decimal ip address format
Return value: pointer to structure if successful, NULL if error
(1) 両関数の family パラメータには、AF_INET (ipv4) または AF_INET6 (ipv6) のいずれかを指定できる。familyパラメータに、サポートされていないアドレスファミリが指定された場合、両関数はエラーを返し、 errnoにEAFNOSUPPORTを設定します。
(2) 最初の関数は、strptr ポインタが指す文字列の変換を試み、そのバイナリ結果を addrptr ポインタ経由で格納し、成功すれば 1 を、入力文字列が指定したファミリに対して有効な表現形式でなければ 0 を返します。
(3) inet_ntop 数値形式(addrptr)から式(strptr)への逆変換を行う関数です。呼び出し側は、対象となるメモリセルに対してメモリを割り当て、そのサイズを指定しなければならない。lenパラメータは、関数が呼び出し側のバッファをオーバーフローした場合に備えて、対象となるメモリセルのサイズである。lenが小さすぎて式の結果を保持できない場合は、ヌルポインタが返され、ENOSPCとしてerrnoに設定される。
<スパン <スパン 4. 例
inet_pton(AF_INET, ip, &foo.sin_addr); // Substitute foo.sin_addr.addr=inet_addr(ip);
char str[INET_ADDRSTRLEN];
char *ptr = inet_ntop(AF_INET,&foo.sin_addr, str, sizeof(str)); // substitute ptr = inet_ntoa(foo.sin_addr)
関連
-
undefinedプッシュ問題マスター -> マスター (フェッチファースト)
-
のエラーが発生しました。アボートトラップ:6(プロジェクト'xx'のターゲット'xx'において)
-
VCの*.objで定義済みの問題を解決します。
-
collect2.exe [エラー] ld が 1 の終了ステータスを返しました。
-
eclipseを起動中、エラー。スレッド "main" で例外発生 java.lang.
-
TensorFlowのネイティブランタイムソリューションのロードに失敗しました。
-
javaは起動したが、終了コード=-805306369を返した。
-
AssertionError [ERR_ASSERTION]: タスク関数を指定しなければならない、gulpのバージョンが一致しない
-
PythonのTypeError: unbound methodの問題を解決する
-
Application_Webservice の Global.asax ファイルの開始をトリガーすることはできません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IIS 7.5上のASP.NET 4.0とチャートに関する質問
-
error: config file .git/config をロックできない: パーミッションが足りない
-
mongodb.service の起動に失敗しました。ユニット mongodb.service が見つかりませんでした。
-
コンパイラーエラーです。ISO C++は型がない***の宣言を禁じています。
-
ArrayAdapterはリソースIDがTextViewである必要がある問題について
-
Pycharm コード ドッカー コンテナ 実行 デバッグ|機械学習シリーズ
-
勉強メモ】pytorchのsqueeze()関数とunsqueeze()関数の紹介
-
落とし穴を踏む-Uncaught Error: BootstrapのJavaScriptは、jQueryを必要とします。
-
Javaでnacosにログインし、設定を変更して公開する。
-
sql server の int から datetime への変換