public void run()
	{
		// システム情報取得
		String str = System.getProperty("os.name");
		mOSName = str;
		str = System.getProperty("os.arch");
		mOSArch = str;
		str = System.getProperty("os.version");
		mOSVersion = str;
		str = System.getProperty("user.name");
		mUserName = str;
		
		DebugLog("user name:" + str);
		DebugLog("os name:" + str);
		DebugLog("os arch:" + str);
		DebugLog("os version:" + str);
		
		try
		{
			InetAddress addr = InetAddress.getLocalHost();
			mHostName = addr.getHostName();

			DebugLog("host name:" + addr.getHostName());
			DebugLog("host ip:" + addr.getHostAddress());
		}
		catch (Exception e) 
		{
			e.printStackTrace();
		}

		// クリップボード監視の開始。
		mClipThread = new ClipboardWatchThread( 500, mPortNum );
		mClipThread.start();
		
		try {
			// ポート番号は、30000
			//ソケットを作成
			mServerSoc = new ServerSocket(mPortNum);
		
			//クライアントからの接続を待機するaccept()メソッド。
			//accept()は、接続があるまで処理はブロックされる。
			//もし、複数のクライアントからの接続を受け付けるようにするには
			//スレッドを使う。
			//accept()は接続時に新たなsocketを返す。これを使って通信を行なう。
			String rcvMsg = null;
			Socket socket=null;
			BufferedReader reader = null;

			while(!mHalt)
			{
				DebugLog("Waiting for Connection. ");

				socket = mServerSoc.accept();
				//接続があれば次の命令に移る。
				DebugLog("Connect to " + socket.getInetAddress());

				mIP = socket.getInetAddress().toString();

				if( mIP.charAt(0) == '/' )
				{
					mIP = mIP.substring( 1, mIP.length());
				}
//				mPointTouchServer.setIpAddress( mIP );
				boolean addIp = mMultiTouchServer.noticeIpAddress( mIP );
				if( addIp == true )
				{
					mClipThread.setIpList( mMultiTouchServer.mIpList );
				}
				
				//socketからのデータはInputStreamReaderに送り、さらに
				//BufferedReaderによってバッファリングする。
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

				//読み取ったデータを表示する。
				try
				{
					rcvMsg = reader.readLine();
				}
				catch( SocketException e )
				{
					System.out.println("Socket Exceptoin!");
					e.printStackTrace();
				}
				
				DebugLog("Message from client :" + rcvMsg);

				//System.out.println( rcvMsg );
				
				//入力ストリームをクローズする。
				reader.close();
				reader = null;
				//通信用ソケットの接続をクローズする。
				socket.close();
				socket = null;
				//待ち受け用ソケットをクローズする。
				if(rcvMsg.matches("end"))
				{
					mServerSoc.close();
					mHalt = true;
					System.out.println("Stopped.");
				}

				char wk = ' ';
				String command = "";
				for( int i = 0; i< rcvMsg.length(); ++i )
				{
					wk = rcvMsg.charAt(i);
					if( wk == ' ' )
					{
						// コマンドの区切り文字。
						// コマンド実行。
						ParthCommand(command);
						command = "";
					}
					else
					{
						command += wk;
					}
				}
			}
			mServerSoc.close();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		
		mClipThread.halt();
	}// end of run()