第12章. ネットワーククライアント
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
12.0 はじめに
Javaは、多くの種類のネットワーク・プログラムを書くのに使うことができる。従来のソケットベースのコードでは、プログラマがクライアント、サーバ間のインタラクションを構造化する責任を負う。 TCPソケットコードは、単に送信したデータが相手側に届くことを保証するだけである。 HTTP、RMI、CORBA、EJBなどの高レベルタイプでは、ソフトウェアがより多くのコントロールを引き継ぐ。ソケットはレガシーアプリケーションに接続するためによく使われる。
ソケットと電話システムを比較することは役に立つかもしれない。電話はもともとアナログ音声通信に使われていた。最初に広く普及したのはファクシミリ送信、つまりファックスである。音声電話の普及がなければ、FAXはどうなっていただろう?歴史的に2番目に広く普及したレイヤー・アプリケーションは、ダイヤルアップTCP/IPだった。これはウェブと共存して大衆向けサービスとして普及した。デプロイされた音声行がなかったら、ダイヤルアップIPはどうなっていただろうか?そして、ダイヤルアップIPがなかったらインターネットはどうなっていただろう? ファクスもダイヤルアップも今はほとんどなくなってしまったが、スマートフォンのネットワーク機能への道を開いた。
ソケットもそのように階層化されている。ウェブ、RMI、JDBC、CORBA、EJBはすべて、ソケットの上に階層化されている。 HTTPは現在最も一般的なプロトコルであり、b地点からa地点にデータを取得したいだけの新しいアプリケーションには、一般的にHTTPを使うべきである。
1995年5月にJavaのアルファ版がリリースされて以来(もともとはHotJavaブラウザの副次的なものだった)、Javaはネットワーク・アプリケーションを構築するためのプログラミング言語として人気がある。特にC言語でネットワーク・アプリケーションを構築したことがある人なら、その理由を理解するのは簡単だ。まず、C言語のプログラマは使用するプラットフォームを気にしなければならない。Unixは同期ソケットを使用し、読み取りと書き込みに関して通常のディスクファイルと同じように動作する。一方、Microsoft OSは非同期ソケットを使用し、読み取りや書き込みが完了したときにコールバックを使用して通知する。Javaはこの区別を無視している。さらに、C言語でソケットをセットアップするために必要なコードの量は膨大である。例 12-1は、クライアントソケットをセットアップするための典型的なC言語コードを示している。これはUnixの部分だけである。また、コネクションを作成し閉じる部分だけである。Windowsに移植するためには、条件付きコードを追加する必要がある(Cの#ifdef メカニズムを使用する)。Cの#include メカニズムは、正確に正しいファイルをインクルードする必要があり、いくつかのファイルは特定の順序でリストされなければならない(Javaのimport メカニズムははるかに柔軟である)。
例12-1. main/src/main/java/network/Connect.c (Cクライアントのセットアップ)
#include <sys/types.h> #include <sys/socket.h> #include ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access