Presentation is loading. Please wait.

Presentation is loading. Please wait.

第12回独習Javaゼミ 12章セクション3~4 発表者 直江 宗紀.

Similar presentations


Presentation on theme: "第12回独習Javaゼミ 12章セクション3~4 発表者 直江 宗紀."— Presentation transcript:

1 第12回独習Javaゼミ 12章セクション3~4 発表者 直江 宗紀

2 ネットワークプロトコル(1) ネットワーク通信 TCP/IPプロトコル プロトコル体系OSI参照モデル 下層から上層まで7層を持つ
世界で一般的に用いられるプロトコル 4層構造 ネットワークアクセス層 ネットワーク層(IP) トランスポート層(TCP、UDP) アプリケーション層

3 ネットワークプロトコル(2) 図1 TCP/IPモデルと各層で扱うデータの名前

4 ソケット ソケットとは ソケットの種類 プロトコルアクセス可能な代表的論理インターフェイス 主に2つの意味で用いられる
APIの意味でのソケット(またはソケットAPI) TCPによるポイントツーポイント接続の一端(エンドポイント) ソケットの種類 UDPの通信:データグラムソケット TCPの通信:ストリームソケット 下位のプロトコルで用いるソケットもあるがここでは省く

5 12.3 データグラムソケットと データグラムパケット(1)
12.3 データグラムソケットと データグラムパケット(1) データグラムソケット TCP/IPプロトコルのサービスに対応するソケット データグラムパケット TCP/IPプロトコルにおけるUDPを利用する場合の送受信データ (本節ではUDPを用いる場合の送受信プログラム)

6 12.3 データグラムソケットと データグラムパケット(2)
12.3 データグラムソケットと データグラムパケット(2) TCPとUDPの違い TCP(コネクション型) コネクション型のサービスを提供 信頼性向上のためデータ欠落の発生時の再送を要求 その際、欠落データを破棄、等 UDP(ノンコネクション型) ノンコネクション型のサービスを提供 データ欠落監視を行わず、簡易的データ送受信を提供 データ欠落しても良いデータ(ストリーミングメディアデータ等)のやり取りに良く用いられる

7 12.3 データグラムソケットと データグラムパケット(3)
12.3 データグラムソケットと データグラムパケット(3) 送受信の流れ 送信側 宛先アドレスの作成 ソケットの作成 データグラムパケットの送信(send) ソケットを閉じる 受信側 受信準備・データ受信

8 データグラムソケットと データグラムパケットにおけるクラス
DatagramPacketとDatagramSocketが用意 ソケット操作は後者のクラス、パケット送受信は前者のクラスで行う DatagramPacketコンストラクタ DatagramPacket(byte buffer[],int size) DatagramPacket(byte buffer[] , int size , InetAddress ia , int port)

9 DatagramPacketクラス(1) クラスに定義されている主なインスタンスメソッド InetAddress getAddress()
着信データグラムの場合、発信元マシンのアドレスを、発信データグラムの場合、宛先マシンのアドレスを返す byte[] getData() データが含むバイトの配列を返す int getPort() ポートを返す int getLength() パケット内のバイト数を返す

10 DatagramPacketクラス(2) 定義されている主なインスタンスメソッド(続き)
void setAddress(InetAddress ia) iaにアドレスをセットする void setData(byte buffer[]) bufferにデータをセットする void setLength(int size) sizeで指定したサイズのパケットをセットする void setPort(int port) portにポートをセットする

11 DatagramSocketクラス DatagramSocketコンストラクタ 主なメソッド DatagramSocket()
DatagramSocket(int port) 例外処理:throws SocketException 主なメソッド void receive(DatagramPacket dp) throws IOException 着信データグラムの監視 void send(DatagramPacket dp) throws IOException データグラムの送信 void close() ソケットのクローズ

12 12.3 データグラムソケットと データグラムパケット(4)
12.3 データグラムソケットと データグラムパケット(4) プログラム例(送信) import java.net.*; public class test2 { public static void main(String args[]){ byte buffer[]=new byte[20] ; for(int i=0;i<20;i++){ byte temp=(byte)(0x0041+i) ; buffer[i]=temp ; } try{ InetAddress ia=InetAddress.getLocalHost() ; int port=Integer.parseInt(args[0]) ; DatagramSocket ds=new DatagramSocket() ;

13 12.3 データグラムソケットと データグラムパケット(5)
12.3 データグラムソケットと データグラムパケット(5) プログラム例(送信:続き) DatagramPacket dp=new DatagramPacket(buffer,buffer.length,ia,port) ; ds.send(dp) ; } catch(Exception e){ e.printStackTrace() ; このプログラムを使って、データグラムパケットを送信する。 この送信したデータを受け取るためのプログラムを次頁に示す。

14 12.3 データグラムソケットと データグラムパケット(6)
12.3 データグラムソケットと データグラムパケット(6) プログラム例(受信) import java.net.*; public class test1 { private final static int BUFSIZE=20 ; private final static int endTime=1000 ; static public void main(String args[]){ try{ int port=Integer.parseInt(args[0]) ; DatagramSocket ds=new DatagramSocket(port) ; byte buffer[]=new byte[BUFSIZE] ; long time=System.currentTimeMillis() ; while(true){ long temp=System.currentTimeMillis()-time ;

15 12.3 データグラムソケットと データグラムパケット(7)
12.3 データグラムソケットと データグラムパケット(7) プログラム例(受信:続き) if(temp>endTime)break ; DatagramPacket dp=new DatagramPacket(buffer,buffer.length) ; ds.receive(dp) ; String str=new String(dp.getData()) ; System.out.println(str) ; } catch(Exception e){ e.printStackTrace() ; 送信プログラムを受信すると… [出力結果] ABCDEFGHIJKLMNOPQRST

16 12.4 URL(1) URL URLクラス Uniform Resource Locator:URL Webリソース識別を目的とする
記述形式 protocol://host:port/file 例: URLクラス URLを用いるために用いるクラス

17 URLクラス URLコンストラクタ 主なメソッド
URL(String protocol,String host,int port,String file) URL(String protocol,String host,String file) 例外:throws MalformedURLException 主なメソッド InputStream openStream() throws IOException URL入力ストリームをオープン String getFile() String getHost() int getPort() String getProtocol()

18 12.4 URL(2) プログラム例 import java.net.*; import java.io.*;
public class test3 { static public void main(String args[]){ try{ URL url=new URL(args[0]) ; InputStream is=url.openStream() ; byte buffer[]=new byte[1024] ; int i ; while((i=is.read(buffer))!=-1)System.out.write(buffer,0,i) ; } catch(Exception e)e.printStackTrace() ;

19 12.4 URL(3) プログラム例について 前頁プログラムを実行する際のコマンドライン引数 「file:test.txt」の場合
指定URLの内容を取得し、表示 例:「 →指定サイトのページのHTMLデータが出力される

20 練習問題1 任意の値2つ用意し、受信側アプリケーションに渡して四則計算させるプログラムを作成せよ。結果を送信側に返す必要は無い。また、データグラムを送信したマシンのインターネットアドレス及びポートも計算結果と共に表示させよ。

21 練習問題2 GoogleサイトTop( (ヒント:String型でデータを読む例) while((i=is.read(buffer))!=-1){ String temp=new String(buffer,0,i) ; }


Download ppt "第12回独習Javaゼミ 12章セクション3~4 発表者 直江 宗紀."

Similar presentations


Ads by Google