1 / 25

Networked Programming and HTTP/Web

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

brinly
Download Presentation

Networked Programming and HTTP/Web

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Networked Programming and HTTP/Web

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

  3. Webサーバとは wwwシステムにおいて、情報送信を行うコンピュータ、wwwによる情報送信機能を持ったソフトウェアのこと。 クライアントであるウェブブラウザのURLにて指示された、Webサーバ内に存在するHTMLドキュメントの各種動作をクライアントから接続されたHTTPに則ったTCP/IPソケットストリーム(HTTPコネクション)に送信する。

  4. Webサーバの構成 馬研究室のサーバの例 • IPアドレス:133.25.82.142 • ドメイン名:www.malab3.k.hosei.ac.jp • サーバ用ソフトウェア:ApacheHTTP Server 2.2.10 / Apache Tomcat 6.0 (Web公開・Java Servret 用) IP(Internet Protocol)とは? ⇒IPアドレスを用いてネットワーク上のPCの位置を表すもの DNSとは? ⇒ドメイン名とIPアドレスを関連付けるシステム

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

  6. ネットワークのレイヤー ネットワークは各層に分かれ、データの送受信を行う。 HTMLファイルの送受信に関する役割 データを過不足なく送り届ける役割 データを特定のPCへ送り届ける役割 →各層に役割を分担することで拡張性 や保守性を高めている ソケットとは? ⇒IP部分とポート番号を組み合わせたネットワークアドレスのこと 法政大学 情報科学研究科 川島友美

  7. TCP/IPまとめ 宛名等 宛先ポート:3000 自分ポート:80 宛名等 宛先ポート:80 自分ポート:3000 宛先等 宛先:www.yahoo.co.jp 自分:192.168.1.20 宛先等 宛先:192.168.1.20 自分:www.yahoo.co.jp 内容 HTTP/1.1 200 OK <HTML>・・・ 内容 (GET index.html HTTP1.1) 宛名等 宛先ポート:3000 自分ポート:80 宛名等 宛先ポート:80 自分ポート:3000 内容 HTTP/1.1 200 OK <HTML>・・・ 内容 (GET index.html HTTP1.1) 宛名等 宛先ポート:3000 自分ポート:80 宛名等 宛先ポート:80 自分ポート:3000 内容 HTTP/1.1 200 OK <HTML>・・・ 内容 (GET index.html HTTP1.1) 内容 (GET index.html HTTP1.1) 内容 HTTP/1.1 200 OK <HTML>・・・ 内容 (GET index.html HTTP1.1) 内容 HTTP/1.1 200 OK <HTML>・・・ HTTP TCP HTTP IP TCP HTTP TCP HTTP HTTP WEBサーバの待ち受けポート番号は80 世界中で統一されている FTPは21、POPは110等々 送信元のポート番号はWindowsが 空いているポートを勝手に選択する 法政大学 情報科学研究科 川島友美

  8. クライアントプログラム - telnet telnetで簡易クライアントを確認する。 ■以下のコマンドを実行 % telnet www.cs.gunma-u.ac.jp 80 Trying 133.8.2.7... Connected towww.cs.gunma-u.ac.jp. Escape character is '^]'. GET /index.html HTTP/1.0

  9. 2台間での通信 - telnet telnetコマンドを用いて通信の確認を行う。 ■以下のコマンドを実行 >>telnet >>192.168.**.** (local 環境) >> User, Passwordを入力 ローカル環境下で接続が確立しているのを確認

  10. JavaによるTelnetプログラムの実現 双方向のTCPコネクションを扱うクライアントプログラムを作成する。 TCPコネクションを開いて、コネクションと標準入出力を接続する。ネットワーク側と標準入力側からの入力を、それぞれ反対側の出力に接続すればよい。 (※実際にプログラムを動かして解説)

  11. JavaによるTelnetプログラムの実現 – Program内での動き

  12. FTP(ファイル転送用プロトコル) ■FTP(File Transfer Protocol) Telnetと同様にインターネット上で広く使われている、2台のコンピュータ間でファイルを転送するためのプロトコル。 TCP/IPの上のプロトコルで、通常21番ポートと20番ポートを使用してアクセス。

  13. FTP – アクセスの確認 (1) コマンドプロンプト(FTP.EXE)からFTPサーバにアクセスする。 >>ftp-d “host_name or IP Address” (-d を付けることにより、サーバへのクライアントからの送信コマンドなどが表示される。) ftp>user: ****** ftp>password:********** 接続が確立されるのを確認。 ftp>ls //一覧表示 -->PORT ***,***,*,**,*,** 200 Data port connected. -->NLST 150 Sending file list. (一覧が表示される)

  14. FTP – アクセスの確認 (2) get, put ftp> get “file_name” -->PORT ***,***,*,**,*,** 200 Data port connected. -->RETR test.txt 150 ASCII file D:/test.txt ready to send 226 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.

  15. JavaによるFTPプログラムの実現 (1) FTPのためのプログラムには、以下の3点が必要。 ■制御用コネクション ■データ転送用コネクション ■ファイルの受渡しを実装する

  16. JavaによるFTPプログラムの実現 (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();

  17. JavaによるFTPプログラムの実現 (3) ls, get, putコマンドに対応してプログラムを作成。 dataConnectionメソッドを用いて、ファイルの受け渡しを可能とする。 各コマンドに対してはそれぞれ、doLS(), doGet(), doPut() が対応している。 ⇒ ソースを見ながら解説

  18. プログラムでメッセージの送受信(1) 最も簡単なメッセージ送信の例を考える。 プログラム実装のための手順は以下の通り。 • 受信側(サーバ)と送信側(クライアント)を確立する。 • ソケット通信を確立する。 • メッセージの送受信をする。

  19. プログラムでメッセージの送受信(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();

  20. チャットプログラムの実現(1) TCPコネクションによるチャットサーバを構築し、サーバ・クライアント型でのチャットシステムを構築する。

  21. チャットプログラムの実現(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();

  22. チャットプログラムの実現(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){} } }

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

  24. Peer to Peer(P2P)– 概要 多数の端末間で通信を行う際のアーキテクチャの一つ。 対等の者同士が通信することを特徴とする通信モデル (※2台のPCを使ってプログラムを動かす)

  25. ネットワークプログラミングを利用した研究 • JXTAを用いたP2Pチャットシステム • 位置情報管理システム • タグ保有端末を利用した位置に捉われないスピーカーシステム • ZigBeeネットワークによる室内情報管理

More Related