• 検索結果がありません。

12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス

N/A
N/A
Protected

Academic year: 2021

シェア "12.1 インターネットアドレス インターネットアドレス インターネットアドレス 32 ビットの長さを持つインターネットに接続されたマシンを識別するのに使う インターネットアドレスは ピリオドで区切られたトークンの並びで表現されることもある インターネットアドレス"

Copied!
16
0
0

読み込み中.... (全文を見る)

全文

(1)

Java独習 第3版

  

12.1 インターネットアドレス

12.2 サーバーソケットとソケット

  

(2)

 

12.1

インターネットアドレス

インターネットアドレス

インターネットアドレス 32ビットの長さを持つ インターネットに接続されたマシンを識別するのに使う。 インターネットアドレスは、ピリオドで区切られたトークンの並びで表現さ れることもある 「www.mycompany.com」 インターネットアドレスをドットストリング表記からドット10進表記へ変換す

るのがDNS(Domain Name System)の役割。 ドットストリング表記(「www.obsorne.com」など) ドット10進表記(「200.200.200.200」など)

(3)

InetAddressクラス

InetAddressクラスに定義されている主なインスタンスメソッド byte[] getAddress() アドレス情報を含むバイトの配列を返す。デー タはネットワークバイトオーダー(最初の要素 が上位バイト)で格納される String getHostAddress() String getHostName() アドレス情報を表す文字列を返す ホスト名を表す文字列を返す メソッド 説明 ● java.net パッケージのInetAddress クラスは、インターネットアドレスを カプセル化している

(4)

getByName()メソッド

static InetAddress getByName(String hostName) throws

UnknownHostException

DNSによって提供される情報を使って、名前からアドレスへの変換を実行する

InetAddressのメソッド ①

getAllByName()メソッド

static InetAddress getAllByName(String hostName) throws

UnknownHostException

ホストが複数のアドレスもっている場合使用する。InetAddressオブジェクトの配列を 取得できる。

(5)

InetAddressのメソッド ②

getLocalHost()メソッド

static InetAddress getLocalHost throws

UnknownHostException

このメソッドからは、ローカルホストの情報をカプセル化したInetAddressオブジェクトが返 される。 2つのメソッドのhostNameには、インターネットのホストの名前を指定。 ドットストリング表記(「www.obsorne.com」など) ドット10進表記(「200.200.200.200」など)

(6)

import java.net.*;

class InetAddressDemo {

public static void main(String[] args) { try{

// アドレスを取得する

InetAddress ias[] = InetAddress.getAllByName(args[0]); for (int i=0; i<ias.length;i++){

System.out.println(ias[i].getHostName()); System.out.println(ias[i].getHostAddress()); byte bytes[] = ias[i].getAddress();

for(int j=0;j<bytes.length;j++){ if(j>0)

System.out.print("."); if(bytes[j] >=0)

(7)

System.out.print(bytes[j]); else System.out.print(bytes[j]+256); } System.out.println(""); } } catch(Exception e){ e.printStackTrace(); } } } 実行結果

>java InetAddressDemo localhost localhost

127.0.0.1 127.0.0.1

(8)

 

12.2

サーバーソケットとソケット

ソケット

ソケットとは、2つのマシン間の双方向通信経路の一端

 2つのアプリケーションが、信頼性のある順次データ交換を行うためのメカ   ニズムを提供。

⇒ これはソケットがTCP(Transmission Control Protocol)と

IP(Internet Protocol)を使用することによって実現されている。

 ServerSocket クラスと Socket クラスはクライアント/サーバーアプリケー ションを作成するのに使用する。

(9)

ServerSocket コンストラクタ

ServerSocketコンストラクタ

ServerSocket(int port) throws IOException

portは、クライアントからの要求を監視するためのソフトウェアポート。ほかの形式の コンストラクタは、送られてくる要求の待ち行列を制限したり、特定のアドレスをバイン ド(監視)したりするものである。

accept()メソッド

Socket accept() throws IOException

クライアントから送られてくる要求を監視する。このメソッドは要求が到着するまで待機する。 accept()メソッドからは、クライアントとの通信に使用するSocketオブジェクトが返される。

void close() throws IOException

close()メソッド

(10)

Socket

Socketクラス

Socket(String hostName, int port) throws UnknownHostException,

IOException

 hostNameはサーバーホストの名前で、ドットストリング表記でもドット10進表記でも構わない  portは、そのサーバーのソフトウェアポートで、このソケットの接続先  ソケットの作成後は、通信に使う入力ストリームと出力ストリームを取得しなければならない クライアントとサーバーのデータ交換には、Socketクラスを使う。このクラスの コンストラクタの1つを次に示す。

(11)

Socket

getInputStream()メソッド、 getOutputStream()メソッド

InputStream getInputStream() throws IOException

OutputStream getOutputStream() throws IOException

void close() throws IOException

close()メソッド

サーバーソケットをクローズする。

InputStreamオブジェクトとOutputStreamオブジェクトは通常、それぞれDateInputStreamオ ブジェクトとDataoutputStreamオブジェクトを作成するのに使用する。

(12)

12.2 サーバーアプリケーション

import java.io.*; import java.net.*; import java.util.*;

public class ServerSocketDemo {

public static void main(String[] args) { try{

// ポートを取得する

int port = Integer.parseInt(args[0]);

// 乱数ジェネレータを作成する

Random random = new Random();

// サーバーソケットを作成する

ServerSocket ss = new ServerSocket(port);

次の例は、簡単なクライアント/サーバーアプリケーションであり、クライアントはサーバーに接続し て、乱数を取得し、それを表示する。

(13)

// 無限ループを作成する while(true){ // クライアントからの要求を受け取る Socket s = ss.accept(); //結果をクライアントに書き込む OutputStream os = s.getOutputStream();

DataOutputStream dos = new DataOutputStream(os); dos.writeInt(random.nextInt()); // ソケットをクローズする s.close(); } } catch(Exception e){ System.out.println("Exception :"+e); } } }

(14)

12.2 クライアントアプリケーション

import java.io.*; import java.net.*; class SocketDemo {

public static void main(String[] args) { try{

// サーバーとポートを取得する

String server = args[0];

int port = Integer.parseInt(args[1]);

// ソケットを作成する

Socket s = new Socket(server, port);

// サーバーから乱数を読み取る

InputStream is = s.getInputStream();

DataInputStream dis = new DataInputStream(is);

(15)

// 結果を表示する System.out.println(i); // ソケットをクローズする s.close(); } catch(Exception e){ System.out.println("Exception: " + e); } } } >java ServerSocketDemo 4231 4231は送られてくる要求の到着先となるソフトウェアポート。 4231でなくても構わないが、1024より下の番号は避ける。 >java SocketDemo 127.0.0.1 4231 127.0.0.1 はローカルマシンを表す。 2番目の引数はサーバーアプリケーションの時と同じポート番号を指定しなければならない。 SocketDemoアプリケーションは、乱数を表示すると終了 実行結果 34889301

(16)

練習問題

問題1 クライアントはサーバーに接続して文字列を取得しそれを表示させる、簡単な クライアント/サーバーアプリケーションを作成しなさい。ただしサーバープログ ラムではコマンドライン引数としてポート番号を、クライアントプログラムでは サーバー名とポート番号を指定してください。 問題2 無限ループを実行するサーバー作成し、クライアントから送られてくるdouble 型の値を読み取りなさい。読み取った値を2乗し、その結果をクライアントに書 き込みなさい。また、double型の値をサーバーアプリケーションに送るクライ アントアプリケーションを作成しなさい。double型の値は、クライアントアプリ ケーションのコマンドライン引数として指定するようにしなさい。

参照

関連したドキュメント

部を観察したところ,3.5〜13.4% に咽頭癌を指摘 し得たという報告もある 5‒7)

仏像に対する知識は、これまでの学校教育では必

つの表が報告されているが︑その表題を示すと次のとおりである︒ 森秀雄 ︵北海道大学 ・当時︶によって発表されている ︒そこでは ︑五

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google

   遠くに住んでいる、家に入られることに抵抗感があるなどの 療養中の子どもへの直接支援の難しさを、 IT という手段を使えば

定的に定まり具体化されたのは︑

これらの船舶は、 2017 年の第 4 四半期と 2018 年の第 1 四半期までに引渡さ れる予定である。船価は 1 隻当たり 5,050 万ドルと推定される。船価を考慮す ると、

を負担すべきものとされている。 しかしこの態度は,ストラスプール協定が 採用しなかったところである。