JAVAを一度も触ったことがない方にお勧め。20年経った今でも面白い。
基礎からわかるTCP/IP Javaネットワークプログラミング, オーム社, 小高 知宏, 1999.8
https://www.amazon.co.jp/dp/4274064867/
初版が発行された年から、JAVA研修の教材として使っている。2002年に第二版(上記URL)が出ている。
この本に到達する前に20冊の本のソースを入力(またはCDについているもの)をコンパイル実行した。
この本の他の本と比較した利点は、JAVAの得意分野であるネットワークが容易に操作できることが体験できることにある。
1996年当時は、別の本でSunmicrosystemsのJAVA, Microsoft J++の演習を行った。1999年以降、この本で、J Builderを使った演習を行った。当方でこの本で受講していただき、3桁の演習修了した方がいて、今では大学や企業で教えている方がいらっしゃる。
今回は、EclipseのJava Developer toolsを利用する。
<この項は書きかけです。順次追記します。>
wiresharkの利用
TCP, IP, UDP, HTTPなど基本通信規約が理解できる。なお、小包(packet)を監視するWiresharkというソフトでデータを取得しながら動作確認すると良い。
http://wireshark.org
wiresharkのソースコードは、各種通信機器でも利用していることがある。詳細はこの記事の最後に。
Eclipse, Java Developer tools導入
Windows
https://www.eclipse.org
からEclipseをダウンロードする。ダウンロード後、
「EclipseのJava Developer tools」を選択して追加導入する。
この選択をしていないと、コンパイルできるが実行エラーが出たことがある。
Macintosh
macOSにEclipseを導入する(5つの壁)
https://qiita.com/kaizen_nagoya/items/b17f03db00aceee41a80
Debian/Ubuntu/Raspbian
apt-get update
apt-get install eclipse
Rasbianで113個のパッケージを導入した。
JAVA プログラム, EclipseでProject, package, java/class作成
JAVAプロジェクトの作成
「File」メニューの「New」の「Java Project」を選択する。
「Project Name」に2.2.1 Readnetであれば「 Readnet」と入れる。「Finish」が選択可能になって入れば「Finish」を押す。
「Java Project」が現れない場合は、「Java developer tools」の導入がうまくいっていない場合である。
再度、導入してみる。
classファイルの作成
「File」メニューの「New」の「class」を選択する。
「Package:」と「Name:」に「readnet」「Readnet」と入れる。「Finish」が選択可能になって入れば「Finish」を押す。
Package名を「Readnet」と大文字で入れると次の警告が上部の「Java Class」の下に現れる。
「This package name is discouraged. By convention, package names usually start with a lowercase letter」
package readnet;
public class Readnet {
}
ファイル名とクラス名が同じになっていることを確認してください。Javaは1つのファイルに1つのclass定義を前提としています。そのため、ファイル名とクラス名が違うとコンパイルエラーになります。
Eclipseでコンパイル、実行、デバッグ
コンパイル
「Run」メニューの「Run Configurations」を選択する。
「Java Application」をダブルクリックする。
「(x)=Arguments」タブを選択し、「Program arguments:」に必要なパラメータを記して「Run」を押す。
例えば、P88「2.2 JAVAで利用できるネットワーク機能」プログラムの中で、使い方として
// 例 JAVA Readnet kick.fuis.fukui-u.ac.jp 60000
となっている。ここは、自分の使っている環境を入れます。例えば、192.168.2.23がIPアドレスであれば、直接IPアドレスを入れても良い。また、ポート番号は60000でも、他に空いている番号で相手との対応で使えば良い。
C言語では、args[0]にはプログラム名が入るが、JAVAではargs[0]に最初の引数が入る。
ファイルを保存するか聞いてくる。「OK」を押す。
実行時のエラーまたはプログラムの結果が「Console」に出る。
コンパイルエラーがある場合には、「Problems」タグに表示がある。
コンパイルエラー
最初のうちは、記述の誤りなどで2−3回はコンパイルエラーが出て、それを直しながら覚えていく。
コンパイルエラーがあるが、ひとまず先に進む場合は「Proceed」、戻って修正してからもう一度コンパイルするときは「Cancel」を選ぶ。
「Package Explorer」、ソースコードの行番号、「Outline」にもコンパイルエラーのありかを表示している。
「Problems」タグを選択すると、コンパイルエラー一覧が出る。2つ以上のエラーがある場合は、
実行・wiresharkによる測定
実行結果が、思うような結果でなかった場合には、
wiresharkを起動して、パケットを計測する。
他のネットワーク機器とのやりとりの場合は、その接続しているインタフェースを選択する。例えば、「Ethernet:en0」。
自分自身とのやりとりの場合は、「Loopback:lo0」を選択する。
これを回避するには、Macintosh, Linuxでは、コマンドプロンプトで
su otheruser
wireshark &
「Loopback:lo0」を選択する。ここでotheruserとは、他のユーザのIDのこと。otheruserと打っても、otheruserというIDの人がいないと知らんと言われる。
自分から自分へのパケットが測定できる。
wiresharkの導入
Windows
Windows Installer (64-bit)
Windows Installer (32-bit)
のいずれかを落として実行。
Macintosh
MacintoshにWiresharkを導入する5つの壁
https://qiita.com/kaizen_nagoya/items/69eb2d357a125f5368e1
参照
Debian/Ubuntu/Raspbian
apr-get update
apt-get install wireshark
Raspberry PiでWiresharkを活用する10の関門
まとめ
JAVAの特徴(C、C++と比べて)
1 Class名とファイル名が同一で、拡張子はそれぞれclass, java。Project, Packageも同一で良い。ただし、Packageは小文字始まりを原則とする。
2 Internetが得意(C、C++のJAVA以前の言語に比べて。)
3 classの中にmain関数がある。違和感。mainクラスまたは実行環境のOSのClassとしてmainクラスがあると良いかも。
4 C言語では、args[0]にはプログラム名が入る。JAVAではargs[0]に最初の引数が入る。
EclipseでJAVA
1 EclipseもJAVAで書かれていて相性が良い。
2 JAVA Developer toolsを導入
3 New ->Java Project, New-> classで始める。
4 コマンドの引数は「(x)=Arguments」タブを選択し、「Program arguments:」に必要なパラメータ
ネットワークプログラミングのデバッグ
1 Wiresharkを使う
2 自分自身へのパケットはLoopbackをインタフェースに指定
3 アクセスが禁止の場合は、アクセス可能な人にsuして、wireshark &で起動
4 自分以外の接続は、Ethernet:en0など具体的に接続しているものを選ぶ。
<この記事は書きかけです。順次、追記します。>
「基礎からわかるTCP/IP JAVAネットワークプログラミング」第二章JAVAによるネットワークプログラミング phttpd 三箇所でException収集
https://qiita.com/drafts/d1db78d3db0e90c0ff9f
でhttp/0.9だから嫌だって言われている。
情報処理技術者試験 ネットワークスペシャリストに合格
通信エミュレータの移植
Macintosh対応「基礎からわかるTCP/IP アナライザ作成とパケット解析 Linux/FreeBSD対応」小高知宏 オーム社
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
文書履歴(document history)
ver. 0.01 初稿 20180305
ver. 0.02 ありがとう追記 20230508
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.