Mercurial > hg > Papers > 2015 > oc-thesis
diff chapter3.tex @ 6:1bc81f8b7517
update chapter3
author | oc |
---|---|
date | Mon, 16 Feb 2015 17:20:04 +0900 |
parents | 14e96778c600 |
children | f6b14e3b72e0 |
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