changeset 6:1bc81f8b7517

update chapter3
author oc
date Mon, 16 Feb 2015 17:20:04 +0900
parents 450825b9b946
children f6b14e3b72e0
files chapter3.tex source/GetNetworkInterfaces.java thesis-paper.tex
diffstat 3 files changed, 68 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/chapter3.tex	Mon Feb 16 01:03:50 2015 +0900
+++ b/chapter3.tex	Mon Feb 16 17:20:04 2015 +0900
@@ -12,11 +12,10 @@
 最低限のソケットポートを開けることによって、
 メモリの使用量を抑えることにも繋がる。
 
-以下に、動的に port 番号を割り当てているソースコードを記述する。
+以下に、動的に port 番号を割り当てているソースコード\ref{selectport}を記述する。
 
-% selectPort する箇所を記述する
 
-\begin{lstlisting}[caption=オプション--fixSize,label=fixsize]
+\begin{lstlisting}[caption=動的な port 番号の割り当て,label=selectport]
     public int selectPort(int p) {
         int port = p;
         while (true) {
@@ -40,13 +39,24 @@
     }
 \end{lstlisting}
 
+\newpage
 
-%  messageの説明にportにどんな関係があるのかとから
+
+selectPort メソッドは、TreeVNC を立ち上げた際に呼ばれる。
+ソースコード\ref{selectport}の try 節で ServerSocket を生成する。
+ServerSocket 生成の際に port 番号を結びつける。
+この時に既に port 番号が使用されている場合、
+BindException error が起こる。
+その場合、catch 節に処理が移行する。
+port をインクリメントし、
+continue でもう一度 ServerSocket を生成しに行く。
+成功するまで port はインクリメントされるので、
+ユニークな port 番号を使用することが可能となる。
+
 以前は固定port番号を使用しmessageの通信を行っていたが、
 一意なportを割り当てられているnodeが通信を行うことによって、
 どのport番号が使用されているかを意識する必要がなくなった。
 
-\newpage
 
 \section{QUALITYモードとSPEEDモード}
 
@@ -85,22 +95,45 @@
 図\ref{fig:multinetworktree}の様に、ネットワークインターフェース別に
 木構造を形成するように設計した。
 
-TreeVNCは、rootがnodeListというリストを保持し、木構造を管理している。
-複数のネットワークインターフェースで木構造を形成する場合、
-このnodeListをネットワークインターフェース毎に作成しておく。
-新しいnodeを接続する際、nodeのネットワークインターフェースを取得し、
-どのnodeListに登録されるかが決まる。
-こうすることによって、TreeVNCを複数のネットワークインターフェイス別に
-木構造を構成することができる。
-
 \begin{figure}[htpd]
   \begin{center}
-    \includegraphics[scale=0.4]{./images/chapter3/MultiNetworkTree.pdf}
+    \includegraphics[scale=0.6]{./images/chapter3/MultiNetworkTree.pdf}
   \end{center}
   \caption{Multi Network Tree}
   \label{fig:multinetworktree}
 \end{figure}
 
+TreeVNC は、root が TreeManager というオブジェクトを持っている。
+TreeManager は TreeVNC の接続部分を管理している。
+TreeManager では木構造を管理する nodeList が生成される。
+この nodeList を元に、新しい node の接続や、node の切断検出時の接続の切り替え等を行う。
+
+今回 TreeManager を、 root の保持しているネットワークインタフェース毎に
+生成する様に変更した。
+ソースコード\ref{createtreemanager}に、nodeList を生成する部分を示す。
+
+\newpage
+
+\lstinputlisting[breaklines=true,caption=TreeManager の生成,label=createtreemanager]{source/GetNetworkInterfaces.java}
+
+\begin{itemize}
+  \item for 文を使用し root が所持しているネットワークインタフェースを取得する(\ref{createtreemanager}中, 2行目)
+  \item その中から、起動しており Multicast に対応しており、また、ループバックインタフェースでないネットワークインタフェースを取得する(\ref{createtreemanager}中, 4行目)
+  \item 取得してきたネットワークインタフェースの、ネットマスク、ホストネームを取得する(\ref{createtreemanager}中, 6,7行目)
+  \item TreeManager を生成する(\ref{createtreemanager}中, 8行目)
+  \item TreeManager にネットマスクとネットアドレスを追加する(\ref{createtreemanager}中, 14行目)
+  \item HashMap である interfaces に ネットワークインタフェースと対応する TreeManager を追加する(\ref{createtreemanager}中, 15行目)
+\end{itemize}
+
+新しい node が接続してきた際、
+interfaces から node のネットワークインタフェースと一致する TreeManager を取得する。
+その TreeManager に、node 接続の処理を任せる。
+
+こうすることによって、TreeVNC を複数のネットワークインターフェース別に
+木構造を構成することができる。
+
+
+
 
 \newpage
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/GetNetworkInterfaces.java	Mon Feb 16 17:20:04 2015 +0900
@@ -0,0 +1,20 @@
+    public void getNetworkInterfaces() throws SocketException {
+      for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();e.hasMoreElements();) {
+        NetworkInterface ni = e.nextElement();
+        if (ni.isUp() && ni.supportsMulticast() && !ni.isLoopback()) {
+          for (InterfaceAddress ipaddress : ni.getInterfaceAddresses()) {
+            byte [] netmask = getNetMask(ipaddress);
+            String hostName = ipaddress.getAddress().getHostName();
+            TreeManagement treeManager = new TreeManagement(hostName, ConnectionParams.DEFAULT_VNC_ROOT, myRfb.getViewer().getShowTree());
+            treeManager.getList().getFirst().setPort(myRfb.getAcceptPort());
+            byte[] netaddr = ipaddress.getAddress().getAddress();
+            for(int i=0;i<netaddr.length;i++) {
+              netaddr[i] &= netmask[i];
+            }
+            treeManager.setNetMask(netmask,netaddr);
+            addNetworkInterface(ni, treeManager);
+            System.out.println("Interfaces :" + ni.getName());
+          }
+        }
+        }
+    }
--- a/thesis-paper.tex	Mon Feb 16 01:03:50 2015 +0900
+++ b/thesis-paper.tex	Mon Feb 16 17:20:04 2015 +0900
@@ -8,7 +8,7 @@
 
 \lstset{
   language={Java},
-  basicstyle={\small},
+  basicstyle={\scriptsize},
   commentstyle={\itshape \color[cmyk]{1,0,1,0}},
   numbers=left,
   frame=single,