250 likes | 364 Views
Networked Programming and HTTP/Web. 目次. ネットワークプログラミングの基礎 Web サーバの概要・構成 Telnet ( クライアントの動作 , 2 台間通信 , Java プログラムの実装 ) FTP ( 概要 , アクセス動作 , Java プログラムの実装 ) チャットプログラム (Java プログラムの実装 , マルチキャスト ) P2P 通信 - JXTA ネットワークプログラムを利用した研究. Web サーバとは.
E N D
目次 • ネットワークプログラミングの基礎 • Webサーバの概要・構成 • Telnet (クライアントの動作, 2台間通信, Javaプログラムの実装) • FTP (概要, アクセス動作, Javaプログラムの実装) • チャットプログラム (Javaプログラムの実装, マルチキャスト) • P2P通信 - JXTA • ネットワークプログラムを利用した研究
Webサーバとは wwwシステムにおいて、情報送信を行うコンピュータ、wwwによる情報送信機能を持ったソフトウェアのこと。 クライアントであるウェブブラウザのURLにて指示された、Webサーバ内に存在するHTMLドキュメントの各種動作をクライアントから接続されたHTTPに則ったTCP/IPソケットストリーム(HTTPコネクション)に送信する。
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アドレスを関連付けるシステム
ポート番号とは 通信のサービスを特定するための番号。 上記はよく利用されるポート番号とプロトコル。 上のように、サービスによってデータの送受信の受け口が分かれている。
ネットワークのレイヤー ネットワークは各層に分かれ、データの送受信を行う。 HTMLファイルの送受信に関する役割 データを過不足なく送り届ける役割 データを特定のPCへ送り届ける役割 →各層に役割を分担することで拡張性 や保守性を高めている ソケットとは? ⇒IP部分とポート番号を組み合わせたネットワークアドレスのこと 法政大学 情報科学研究科 川島友美
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が 空いているポートを勝手に選択する 法政大学 情報科学研究科 川島友美
クライアントプログラム - 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
2台間での通信 - telnet telnetコマンドを用いて通信の確認を行う。 ■以下のコマンドを実行 >>telnet >>192.168.**.** (local 環境) >> User, Passwordを入力 ローカル環境下で接続が確立しているのを確認
JavaによるTelnetプログラムの実現 双方向のTCPコネクションを扱うクライアントプログラムを作成する。 TCPコネクションを開いて、コネクションと標準入出力を接続する。ネットワーク側と標準入力側からの入力を、それぞれ反対側の出力に接続すればよい。 (※実際にプログラムを動かして解説)
JavaによるTelnetプログラムの実現 – Program内での動き
FTP(ファイル転送用プロトコル) ■FTP(File Transfer Protocol) Telnetと同様にインターネット上で広く使われている、2台のコンピュータ間でファイルを転送するためのプロトコル。 TCP/IPの上のプロトコルで、通常21番ポートと20番ポートを使用してアクセス。
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. (一覧が表示される)
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.
JavaによるFTPプログラムの実現 (1) FTPのためのプログラムには、以下の3点が必要。 ■制御用コネクション ■データ転送用コネクション ■ファイルの受渡しを実装する
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();
JavaによるFTPプログラムの実現 (3) ls, get, putコマンドに対応してプログラムを作成。 dataConnectionメソッドを用いて、ファイルの受け渡しを可能とする。 各コマンドに対してはそれぞれ、doLS(), doGet(), doPut() が対応している。 ⇒ ソースを見ながら解説
プログラムでメッセージの送受信(1) 最も簡単なメッセージ送信の例を考える。 プログラム実装のための手順は以下の通り。 • 受信側(サーバ)と送信側(クライアント)を確立する。 • ソケット通信を確立する。 • メッセージの送受信をする。
プログラムでメッセージの送受信(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();
チャットプログラムの実現(1) TCPコネクションによるチャットサーバを構築し、サーバ・クライアント型でのチャットシステムを構築する。
チャットプログラムの実現(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();
チャットプログラムの実現(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){} } }
チャットプログラムの実現(マルチキャスト)チャットプログラムの実現(マルチキャスト) UDPマルチキャスト通信によるチャットシステムの構築。 全てのクライアントが一つのパケットを共有するシステム。
Peer to Peer(P2P)– 概要 多数の端末間で通信を行う際のアーキテクチャの一つ。 対等の者同士が通信することを特徴とする通信モデル (※2台のPCを使ってプログラムを動かす)
ネットワークプログラミングを利用した研究 • JXTAを用いたP2Pチャットシステム • 位置情報管理システム • タグ保有端末を利用した位置に捉われないスピーカーシステム • ZigBeeネットワークによる室内情報管理