iPhoneからC言語を使ってUDP通信してみる、その1

f:id:araemonz:20181128170938j:plain

iOSからMacへUDP送信してみる。

学習がてらNSStreamを使わずに、C言語で書いてみることにする。

UDPはUser Datagram Protocolの略だそうで、データグラムっていうのは、配送が成功したかどうかの確認はしないので届くかどうか保証されないっすよ、という意味らしい。

UDPサーバー

さて、Macのターミナルのnetcatコマンドを使ってさくっとUDPサーバーを立ち上げる。

UDPで待ち受けるにはたったのこれおk。nc -u -l 8888

ちなみにUDPの場合、ポートが開いているかスキャンはできないようだ。

nc -vz 192.168.100.101 8888

データグラムの特性で、そういうことなんでしょう。

TCPで待ち受けるとスキャンできる。nc -l 8888

iOSプログラミング

ViewController.mm

Objective-cでC言語の関数を使いたい場合は.mファイルを.mmの拡張子にすれば良いようだ。

sockaddr_inという構造体に送信先アドレスやポート番号を設定してる。

socketという関数を使って、UDPならSOCK_DGRAMを指定してやれば良いようだ。

AF_INETはIPv4のインターネットプロトコルで通信しまっせということらしい。

これでアプリのボタンを押せば、Mac側で立ち上げたターミナル画面にメッセージが表示される。

UDPの仕様

f:id:araemonz:20181128173752j:plain

ポートが16ビットの長さなので、2の16乗 = 65536番まで指定できるということだ。

今回でUDPへの理解が少し深まった。