ソケットAPI

ここに書いた方法は古い方法です。 動作はしますが、生のC言語を使うのはあまり一般的ではないので特殊な用途以外は参考にしないで下さい。

ここでは、Mac OS X上でBSDソケットAPIを使ったネットワークプログラミングの説明を行います。 説明内容は主にソケットプログラミングになります。

開発環境としては、C言語+gccを想定しています。 Objective-Cの中でC言語と同じように記述することも可能なので、Objective-Cでも、サンプルコードはそのまま動くと思います。 C言語APIを直接使うよりCocoaを使う方が一般的であるため、速度を求めたりBSDやLinux用のコードを移植するときなどに利用する事になると思われます。

コードを書く前の準備

まず、gccを使える状態にしないといけません。 Mac OS Xを普通にインストールしただけでは開発環境は入りません。 Xcodeを含むMac OS X開発環境はOS DVDなどに入っています。

次に、エディタが必要になります。 標準開発環境であるXcodeを利用して書くことができます。 一方で、UNIXやLinuxなどで一般的なエディタであるmule、emacs、xemacsなどを利用することも可能です。 個人的にはviが好きです。

実際にプログラミング

では、実際にネットワークを使って通信を行うコードを書きながら説明をしていきたいと思います。 Mac OS XはBSDから派生しているため、一般的なBSDソケットプログラミングと基本的には同じです。

はじめに

サンプルコード利用方法

Mac OS Xネットワークプログラミング全般

socketの作成

エラー内容の取得

TCP

TCPを使う

TCPを使う(サーバ)

TCPを使う(サーバ、エラー処理付き)

TCPを使う(acceptした相手の確認)

TCPを使う(サーバ、SO_REUSEADDR)

HTTPサーバの作成(TCPサーバサンプル)

TCPを使う(クライアント、inet_addr、gethostbyname)

TCPを使う(クライアント、gethostbyname)

TCPを使う(クライアント、エラー処理付き)

HTTPクライアントの作成(TCPクライアントサンプル)

UDP

UDPを使う

UDPでブロードキャストを使う

UDPでマルチキャストを使う(マルチキャストを送信する)

UDPでマルチキャストを使う(マルチキャストを受信する)

UDPでマルチキャストを使う(TTLを設定する)

その他

IPアドレスからホスト名への変換(gethostbyaddr)

selectの利用

selectの利用(タイムアウト付き)

selectを横から止める方法

pselectでシグナルを無視する

ノンブロッキング設定

簡単なpingの作成(ICMPの送受信)

ネットワーク情報の取得

ネットワークインターフェース一覧を取得

インターフェースのIPアドレスを取得

インターフェースのネットマスクを取得

ネットワーク情報の設定

インターフェースのIPアドレスを設定する

インターフェースのネットマスクを設定する

インターフェースをdown状態にする

インターフェースをup状態にする

IPv6

getaddrinfo(単純な例)

getaddrinfo(エラー処理)

getaddrinfo(getaddrinfoを使ってsockaddrを作成する)

getaddrinfo(一番使いそうな例)

関連情報

インターネット入門(基礎技術)
インターネットの仕組みを初心者向けに説明しています。
Linuxネットワークプログラミング
Linuxでネットワークプログラミングを行いたい方はこちらをご覧ください。
Windowsネットワークプログラミング
WinSockを使ってWindows上で通信プログラムを書きたい方はこちらをご覧ください。
Perlネットワークプログラミング
Perlによるネットワークプログラミング解説です。
Rubyネットワークプログラミング
Rubyによるネットワークプログラミング解説です。

IPv6基礎検定

YouTubeチャンネルやってます!