25
Networked Programming Networked Programming and HTTP/Web and HTTP/Web

Networked Programming and HTTP/Web

  • Upload
    brinly

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

Networked Programming and HTTP/Web. 目次. ネットワークプログラミングの基礎 Web サーバの概要・構成 Telnet ( クライアントの動作 , 2 台間通信 , Java プログラムの実装 ) FTP ( 概要 , アクセス動作 , Java プログラムの実装 ) チャットプログラム (Java プログラムの実装 , マルチキャスト ) P2P 通信 - JXTA ネットワークプログラムを利用した研究. Web サーバとは. - PowerPoint PPT Presentation

Citation preview

Page 1: Networked Programming  and HTTP/Web

Networked Programming Networked Programming and HTTP/Weband HTTP/Web

Page 2: Networked Programming  and HTTP/Web

目次目次ネットワークプログラミングの基礎Web サーバの概要・構成Telnet ( クライアントの動作 , 2 台間通信 ,

Java プログラムの実装 )FTP ( 概要 , アクセス動作 ,

Java プログラムの実装 )チャットプログラム (Java プログラムの実装 ,

マルチキャスト )P2P 通信 - JXTAネットワークプログラムを利用した研究

Page 3: Networked Programming  and HTTP/Web

WebWeb サーバとはサーバとはwww システムにおいて、情報送信を行うコンピュータ、 www による情報送信機能を持ったソフトウェアのこと。

クライアントであるウェブブラウザの URL にて指示された、 Web サーバ内に存在する HTML ドキュメントの各種動作をクライアントから接続されたHTTP に則った TCP/IP ソケットストリーム( HTTP コネクション)に送信する。

クライアントからの要求

要求されたデータを送るWebサーバクライアント

Page 4: Networked Programming  and HTTP/Web

WebWeb サーバの構成サーバの構成馬研究室のサーバの例 IP アドレス: 133.25.82.142ドメイン名: www.malab3.k.hosei.ac.jpサーバ用ソフトウェア:

Apache HTTP Server 2.2.10 / Apache Tomcat 6.0 (Web 公開・ Java

Servret 用 )

IP(Internet Protocol) とは?⇒ IP アドレスを用いてネットワーク上の PC の位置を表すもの

DNS とは?⇒ドメイン名と IP アドレスを関連付けるシステム

Page 5: Networked Programming  and HTTP/Web

ポート番号とはポート番号とは通信のサービスを特定するための番号。

No Protocol サービス

20 ftp-data ファイル転送(データ本体)

21 ftp ファイル転送(コントロール)

22 ssh シェル: SSH (セキュア)

23 telnet シェル: telnet

25 smtp メール送受信: SMTP

53 domein DNS

80 http WWW

110 pop3 メール受信( POP )

上記はよく利用されるポート番号とプロトコル。上のように、サービスによってデータの送受信の受け口が分かれている。

Page 6: Networked Programming  and HTTP/Web

ネットワークのレイヤーネットワークのレイヤー

IP

TCP

HTTP

ソケットとは?⇒ IP 部分とポート番号を組み合わせたネットワークアドレスのこと

HTML ファイルの送受信に関する役割データを過不足なく送り届ける役割

データを特定の PC へ送り届ける役割

→各層に役割を分担することで拡張性 や保守性を高めている

法政大学 情報科学研究科 川島友美

ネットワークは各層に分かれ、データの送受信を行う。

Page 7: Networked Programming  and HTTP/Web

TCP/IPTCP/IP まとめまとめ

www.yahoo.co.jp IP:192.168.1.20

Internet Explorer

メーラー

メッセンジャー

ポート

・・・

・・・

012

2000

3000

65535

・・・

・・・

・・・

アプリケーション

OS (WindowsXP等)

メールサーバ

WEBサーバ(Apache)

FTPサーバ

ポート

・・・

・・・

012

21

80

65535

・・・

・・・

・・・

アプリケーション

OS (Linux等)

法政大学 情報科学研究科 川島友美

HTTP

宛先等宛

先 :www.yahoo.co.jp

自分 :192.168.1.20

内容(GET index.html

HTTP1.1)TCP

宛名等宛先ポート :80自分ポート :3000

HTTP

内容(GET index.html

HTTP1.1)

宛名等宛先ポート :80自分ポート :3000

HTTP

内容(GET index.html

HTTP1.1)

WEB サーバの待ち受けポート番号は 80世界中で統一されているFTP は 21 、 POP は 110 等々

送信元のポート番号は Windows が空いているポートを勝手に選択する

TCP

宛名等宛先ポート :80自分ポート :3000

HTTP

内容(GET index.html

HTTP1.1)

HTTP

内容(GET index.html

HTTP1.1)

IP TCP

内容HTTP/1.1 200

OK<HTML> ・・・

宛先等宛先 :192.168.1.20自分 :www.yahoo.co.jp

内容HTTP/1.1 200

OK<HTML> ・・・

内容HTTP/1.1 200

OK<HTML> ・・・

内容HTTP/1.1 200

OK<HTML> ・・・

内容HTTP/1.1 200

OK<HTML> ・・・

宛名等宛先ポート :3000自分ポート :80

宛名等宛先ポート :3000自分ポート :80

宛名等宛先ポート :3000自分ポート :80

Page 8: Networked Programming  and HTTP/Web

クライアントプログラム クライアントプログラム - - telnettelnettelnet で簡易クライアントを確認する。

■以下のコマンドを実行

% telnet www.cs.gunma-u.ac.jp 80

Trying 133.8.2.7... Connected to  www.cs.gunma-u.ac.jp. Escape character is '^]'.

GET /index.html HTTP/1.0

Page 9: Networked Programming  and HTTP/Web

22 台間での通信 台間での通信 - telnet- telnet

telnet コマンドを用いて通信の確認を行う。

■以下のコマンドを実行>>telnet >>192.168.**.** (local 環境 )>> User, Password を入力

ローカル環境下で接続が確立しているのを確認

Page 10: Networked Programming  and HTTP/Web

JavaJava によるによる TelnetTelnet プログラムの実プログラムの実現現双方向の TCP コネクションを扱うクライアントプログラムを作成する。

TCP コネクションを開いて、コネクションと標準入出力を接続する。ネットワーク側と標準入力側からの入力を、それぞれ反対側の出力に接続すればよい。

(※実際にプログラムを動かして解説)

Page 11: Networked Programming  and HTTP/Web

JavaJava によるによる TelnetTelnet プログラムの実現 プログラムの実現 – –  ProgramProgram 内で内での動きの動き

Class TelnetTest

>int HTTP_port = 80;>String host = “www.cs.gunma-u.ac.jp";

使用するポートを 80 に、接続先の host 名を入力する。

>PrintWriter netOut = null;>BufferedReader netIn = null;

入出力ストリームの宣言

>Socket http = new Socket(host,HTTP_port);>netIn = new BufferedReader(>new InputStreamReader(http.getInputStream(),"EUC_JP"));>netOut = new PrintWriter(http.getOutputStream());

入出力ストリームの生成とソケットへの結びつけを行う。

>System.out.println("HTTP サーバ ("+host+") に接続 ...");>netOut.print("GET /index.html HTTP/1.0");>netOut.print("Host: " + host + "\n");>netOut.print("\r\n\r\n");>netOut.flush();

HTTP プロトコルに従った文字列の送受信を行う。

Page 12: Networked Programming  and HTTP/Web

FTPFTP (( ファイル転送用プロトコルファイル転送用プロトコル ) )

■FTP(File Transfer Protocol)Telnet と同様にインターネット上で広く使われている、 2 台のコンピュータ間でファイルを転送するためのプロトコル。

TCP/IP の上のプロトコルで、通常 21 番ポートと 20 番ポートを使用してアクセス。

Port 20

Port 21

データ転送用コネクション

制御用コネクション FTP ServerFTP Client

Page 13: Networked Programming  and HTTP/Web

FTP – FTP – アクセスの確認 アクセスの確認 (1)(1)

コマンドプロンプト (FTP.EXE) から FTPサーバにアクセスする。

>>ftp -d “host_name or IP Address”(-d を付けることにより、サーバへのクライアントからの送信コマンドなどが表示される。 )

ftp>user: ******ftp>password:**********

接続が確立されるのを確認。ftp>ls // 一覧表示

-->PORT ***,***,*,**,*,**200 Data port connected.

-->NLST150 Sending file list.

( 一覧が表示される )

Page 14: Networked Programming  and HTTP/Web

FTP – FTP – アクセスの確認 アクセスの確認 (2) get, (2) get, putputftp> get “file_name”

-->PORT ***,***,*,**,*,**200 Data port connected.

-->RETR test.txt150 ASCII file D:/test.txt ready to send226 Transfer finished successfully.

ftp> put”file_name”-->PORT ***,***,*,**,*,**

200 Data port connected.-->STOR test.txt

150 File D:/test.txt start to receive.226 Transfer finished successfully.

Page 15: Networked Programming  and HTTP/Web

JavaJava によるによる FTPFTP プログラムの実現 プログラムの実現 (1)(1)FTP のためのプログラムには、以下の

3 点が必要。

■制御用コネクション

■データ転送用コネクション

■ファイルの受渡しを実装する

Page 16: Networked Programming  and HTTP/Web

JavaJava によるによる FTPFTP プログラムの実現 プログラムの実現 (2)(2)// 制御用のポートなので、 21 番を指定する

final int CTRLPORT = 21;

// ソケットと入出力ストリームの関連付け・コネクションの開閉

public void openConnection(String host) throws IOException, UnknownHostException{

ctrlSocket = new Socket(host,CTRLPORT);

ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());

ctrlInput = new BufferedReader(new InputStreamReader(ctrlSocket.getInputStream()));

}

public void closeConnection() throws IOException{

ctrlSocket.close();

}

//Login 動作 ログイン名と password をサーバへの送信

System.out.println("login name:");

LoginName = Lineread.readLine();

ctrlOutput.println("USER " + LoginName);

ctrlOutput.flush();

System.out.println("password:");

password = Lineread.readLine();

ctrlOutput.println("PASS " + password);

ctrlOutput.flush();

Page 17: Networked Programming  and HTTP/Web

JavaJava によるによる FTPFTP プログラムの実現 プログラムの実現 (3)(3)ls, get, put コマンドに対応してプログラムを作成。dataConnection メソッドを用いて、ファイルの受け渡しを可能とする。

各コマンドに対してはそれぞれ、 doLS(), doGet(), doPut() が対応している。

⇒ ソースを見ながら解説

Page 18: Networked Programming  and HTTP/Web

プログラムでメッセージの送受信プログラムでメッセージの送受信 (1)(1)

最も簡単なメッセージ送信の例を考える。プログラム実装のための手順は以下の通り。

受信側(サーバ)と送信側(クライアント)を確立する。

ソケット通信を確立する。メッセージの送受信をする。

Page 19: Networked Programming  and HTTP/Web

プログラムでメッセージの送受信プログラムでメッセージの送受信 (2)(2)

ローカル環境でメッセージの送受信のテストを行うサーバ側aSocket = new

ServerSocket(6000);

aSocket.setSoTimeout(0);

aClient = aSocket.accept();

InputStream inStream =

aClient.getInputStream();

len = inStream.read(buf);

System.out.print(new String(buf,0,len));

aSocket.close();

クライアント側byte buf[] = new byte[256];int len;

BufferedReader lineread = new          BufferedReader(new InputStreamReader(System.in));

System.out.println("IP Address:");line = lineread.readLine();ip = InetAddress.getByName(line);

clientSocket = new Socket(ip,PORT_NUMBER);

OutputStream outStream = clientSocket.getOutputStream();

System.out.println("message>");len = System.in.read(buf);if(clientSocket.isConnected())

outStream.write(buf,0,len);

clientSocket.close();

Page 20: Networked Programming  and HTTP/Web

チャットプログラムの実現チャットプログラムの実現 (1)(1)

TCP コネクションによるチャットサーバを構築し、サーバ・クライアント型でのチャットシステムを構築する。

Chat server

userA userB userC

A > Hello!

A > Hello! A > Hello! A > Hello!

Page 21: Networked Programming  and HTTP/Web

チャットプログラムの実現チャットプログラムの実現 (2) – (2) – サーバ側サーバ側

// クライアントからの接続待ちの部分while(true){try{Socket cs = serverSocket.accept();addConnection(cs);Thread ct = new Thread(new

clientProc(cs));ct.start();

// コネクションの追加public static void

addConnection(Socket s){if(connections == null)

connections = new Vector();connections.addElement(s);}

// 各クライアントにメッセージを送信public static void sendAll(String s){if(connections != null){for(Enumeration e = connections.elements(); e.hasMoreElements() ;){

try{PrintWriter pw = new PrintWriter(((Socket) e.nextElement()).getOutputStream());pw.println(s);pw.flush();

Page 22: Networked Programming  and HTTP/Web

チャットプログラムの実現チャットプログラムの実現 (3) – (3) – クライアント処理クライアント処理側側

// コンストラクタpublic clientProc(Socket s)

throws IOException{

this.s = s;

in = new BufferedReader(new InputStreamReader(s.getInputStream()));

out = new PrintWriter(s.getOutputStream());

}

// 各クライアントとの接続処理を行うpublic void run(){try{while (name == null){out.print("name? >");out.flush();name = in.readLine();}String line = in.readLine();while(!"quit".equals(line)){ChatServer.sendAll(name + "> " + line);line = in.readLine();}ChatServer.deleteConnection(s);s.close();}catch(IOException e){try{s.close();}catch(IOException e2){}}}

Page 23: Networked Programming  and HTTP/Web

チャットプログラムの実現チャットプログラムの実現(マルチキャスト)(マルチキャスト)

UDP マルチキャスト通信によるチャットシステムの構築。全てのクライアントが一つのパケットを共有するシステム。

LAN 2 LAN 3

LAN 4LAN 1

マルチキャストパケットを受信するコンピュータ

マルチキャストパケット

マルチキャストパケット

マルチキャストパケット送信元

マルチキャストパケット

Page 24: Networked Programming  and HTTP/Web

Peer to Peer(P2P)Peer to Peer(P2P) – – 概要概要多数の端末間で通信を行う際のアーキテクチャの一つ。

対等の者同士が通信することを特徴とする通信モデル

(※ 2 台の PC を使ってプログラムを動かす)

Page 25: Networked Programming  and HTTP/Web

ネットワークプログラミングを利用した研究ネットワークプログラミングを利用した研究

JXTA を用いた P2P チャットシステム位置情報管理システムタグ保有端末を利用した位置に捉われないスピーカーシステム

ZigBee ネットワークによる室内情報管理