ホームページへ戻る
 

上へ戻る
 

    Java入門  その5      by  H.Y     3月 23 17:49:27 JST 2002


目次

1。ネットワーク
1ー1。 URL (Uniform Resouce Lacator)
1ー2。インターネットアドレス (InetAddess クラス)
1)ローカルマシンのアドレスを取得
2)ホストアドレスを取得
1ー3。URL クラス
1)サンプル 1
2)サンプル 2
1ー4。URLConnectionクラス
1ー5。ソケット
1)ServerSockクラス
2)Socketクラス
3)ソケットプログラム
1ー6。クライアント・プログラム
1ー7。サーバー・プログラム
1ー8。UDP ソケット通信
1) DatagramPacketクラス
2) DatagramSocketクラス
3) 受信・サンプルプログラム
4) 送信・サンプルプログラム

==========================================================================================

1。ネットワーク
1ー1。 URL (Uniform Resouce Lacator)
URL は URI(Unifor Resource Identifier)の一種であり、ネットワーク上のリソースを一意的
に特定する。
=================================================
プロトコル://ホスト名:ポート番号/ファイル名
=================================================
1ー2。インターネットアドレス (InetAddess クラス)
Java 上で IP アドレスを用いるには、java.net パッケージの InetAddress クラスを用いる。
1)ローカルマシンのアドレスを取得
--------------- IpAddressSample1.java ---------------------------
import java.net.*;

class IpAddressSample1{
public static void main(String args[]){
try{
InetAddress Hostname = InetAddress.getLocalHost();
System.out.println("Hostname : " + Hostname.getHostName());
System.out.println("IP Address : " + Hostname.getHostAddress());
}
catch(UnknownHostException e){
System.err.println(e.getMessage());
System.exit(-1);
}
}
}
2)ホストアドレスを取得
-------------- IpAddressSample2.java ------------------------------- import java.net.*;
class IpAddressSample2{
public static void main(String args[]){
try{
InetAddress host = InetAddress.getByName(args[0]);
System.out.println("Hostname : " + host.getHostName());
System.out.println("IP Address : " + host.getHostAddress());
}
catch(UnknownHostException e){
System.err.println(e.getMessage());
System.exit(-1);
}
}
}
---- 実行 --------------------
(1) java IpAddressSample1 www.sony.co.jp
(2) 結果
Hostname : www.sony.co.jp
IP Address : 210.139.255.223

1ー3。URL クラス
コンストラクタ URL(String spec) では、spec で URLを指定する。
2 番目のコンストラクタでは 、プロトコル、ホスト名、ポート番号、ファイル名をそれぞれ
指定する。

1)サンプル 1
以下のサンプルは、指定URLより、ソースを読み込みこれを表示する。OpenStream()メソッ
ドで、URL から取得した InputStream オブジェクトを InputStreamReaderクラスと、
BufferedReaderクラスでラップしている。この結果 String型として扱える。
InputStreamクラスはバイトストリームなので、InputStreamReaderクラスで、バイトを文字型
に変える。BufferedReaderクラスは、文字ストリームを、バッファに読み込む。

-------------- IpURLSample1.java ------------------------
import java.net.*;
import java.io.*;

class IpURLSample1{
public static void main(String args[]){
String enc = "SJIS"; //エンコード Shift JIS
try{
//URLの取得、URLオブジェクトの生成
URL url = new URL(args[0]);
//入力ストリームを取得 SJIS でエンコードする。
BufferedReader br = new BufferedReader(
new InputStreamReader(url.openConnection().getInputStream(), enc));
//出力
String str;
while((str = br.readLine()) != null){
System.out.println(str);
}
br.close();
}
catch(Exception e){
System.err.println("Exception : " + e);
System.exit(-1);
}
}
}
----------- 実行 -------------------------------
java IpURLSample1 http://www.sony.co.jp

2)サンプル 2
--------------------------------- URL.java -----------------------------
import java.net.*;

class URLs {
public static void main(String args[]) throws MalformedURLException {
URL url = new URL("http://www.sun.com/worldwide/");

System.out.println("URL protocol: " + url.getProtocol());
System.out.println("Host name: " + url.getHost());
System.out.println("File name: " + url.getFile());
System.out.println("Ext:" + url.toExternalForm());
}
}
------------- 実行 --------------
(1) java URLs http://www.sony.co.jp
(2) 結果
URL protocol: http
Host name: www.sun.com
File name: /worldwide/
Ext:http://www.sun.com/worldwide/

1ー4。URLConnectionクラス
----------- URLConnections.java -----------------------
import java.io.*;
import java.net.*;
import java.util.Date;

class URLConnections {
public static void main(String args[]) throws Exception {
int character;
URL url = new URL(args[0]);
URLConnection urlconnection = url.openConnection();

System.out.println("Content type: " +
urlconnection.getContentType());
System.out.println("Document date: " +
new Date(urlconnection.getDate()));
System.out.println("Last modified: " +
new Date(urlconnection.getLastModified()));
System.out.println("Document expires: " +
urlconnection.getExpiration());

int contentlength = urlconnection.getContentLength();

System.out.println("Content length: " + contentlength);

if (contentlength > 0) {
InputStream in = urlconnection.getInputStream();

while ((character = in.read()) != -1) {
System.out.print((char) character);
}

in.close();
}
}
}

1ー5。ソケット
1)ServerSockクラス
サーバプログラムを作成するのに使う。
このクラスのオブジェクトは、クライアントからの接続を監視する。
2)Socketクラス
このクラスは、リモートマシンに対して、ソケット通信を行うことができる。
3)ソケットプログラム
指定したURLから ページのソースを取得する。
----------------- seckets.java ------------------------------------
import java.io.*;
import java.net.*;

public class sockets {
public static void main(String[] args) {
String enc = "SJIS"; //エンコード Shift JIS
try {
Socket s = new Socket(args[0], 80);

BufferedReader in = new BufferedReader(new
InputStreamReader(s.getInputStream(), enc ) );
PrintWriter out = new PrintWriter(s.getOutputStream());

out.print("GET /index.html\n\n");
out.flush();

String line;

while ((line = in.readLine()) != null){
System.out.println(line);
}

} catch (Exception e){}
}
}
-------- 実行 --------------------------
java sockets www.sony.co.jp

1ー6。クライアント・プログラム
サーバー(localhost) に接続し、メッセージを送信し、受信する。
------------ client.java -------------------------------------
import java.net.*;
import java.io.*;

class client {
public static void main(String args[]) throws Exception {
int character;

Socket socket = new Socket("127.0.0.1", 8000);
//Socket socket = new Socket(args[0], 8000);

InputStream in = socket.getInputStream(); //バイトストリーム
OutputStream out = socket.getOutputStream();

String string = "Hello!! This is the message from client by Socket.\n";
byte buffer[] = string.getBytes(); //バイト型配列に変換
out.write(buffer);

while ((character = in.read()) != -1) {
System.out.print((char) character);
}
socket.close();
}
}

1ー7。サーバー・プログラム
------------------- server.java ------------------------------------
import java.io.*;
import java.net.*;

public class server {
public static void main(String[] args ) {
//int port;
//port = Integer.parseInt(args[0]);
try {
ServerSocket socket = new ServerSocket(8000); //(port)

Socket insocket = socket.accept( );

BufferedReader in = new BufferedReader (new
InputStreamReader(insocket.getInputStream()),String enc);
PrintWriter out = new PrintWriter (insocket.getOutputStream(), true);

String instring = in.readLine();
out.println("The server got this: " + instring);
insocket.close();
}
catch (Exception e) {}
}
}

1ー8。UDP ソケット通信
1) DatagramPacketクラス
データグラムパケットを扱うクラス。
2) DatagramSocketクラス
データグラムパケットを送受信するための、ソケットを扱う。
3) 受信・サンプルプログラム
--------------IpUDPRecieveSample1.java -----------------------
import java.net.*;
import java.io.*;

class IpUDPReceiveSample1{
//データの最大長
private static int BUFFER_SIZE = 256;
//ポート番号
static int port = 8000;

public static void main(String args[]){
try{
//データグラムソケットオブジェクト生成
DatagramSocket ds = new DatagramSocket(port);
byte[] data = new byte[BUFFER_SIZE];

System.out.println("Waiting...");

while(true){
//データグラムパケットオブジェクト生成
DatagramPacket dp = new DatagramPacket(data, BUFFER_SIZE);
//データを受け取る
ds.receive(dp);
data = dp.getData();
//データ長の取得
int length = dp.getLength();
//Stringオブジェクトの生成
String str = new String(data, 0, length);
System.out.println(str);
}
}
catch(Exception e){
System.err.println("Exception : " + e);
}
}
}

4)送信・サンプルプログラム
-------------------- IpUDPSendSample1.java ------------------
import java.net.*;
import java.io.*;

class IpUDPSendSample1{
public static void main(String args[]){
try{
//サーバを取得する
InetAddress host = InetAddress.getByName(args[0]);
//ポート番号
int port = 8000;
//メッセージ
String message = args[1];
//データグラムソケット作成
DatagramSocket ds = new DatagramSocket();
byte[] data = message.getBytes();
//データグラムパケット作成
DatagramPacket dp = new DatagramPacket(data, data.length, host, port);
ds.send(dp);
System.out.println("Send done");
}
catch(Exception e){
System.err.println("Exception : " + e);
}
}
}
---------------実行 -----------------------
(1) java IpUDPRecieveSample1 "localhost" "これは UDP 送信のテストです。"
(2) Waiting...
(3) java IpUDPSendSample1
(4) これは UDP 送信のテスト です。