常见问答

1. 初次安装HomeCenter及使用步骤

  • HC_Server.zip MD5 : ee86752aab8545e0b886a0cb86f91884
  • Source Code :
    • https://github.com/javalovercn/homecenter.git
    • Server_Src.zip MD5 : 159c588866a76203ad648259d22a69b3   更新日期:2017-07-19(YYYY-mm-dd)

启动服务器端及注册步骤:
  1. 安装Java运行环境(JRE) 7或最新。
    JRE下载网址:https://www.java.com/
    支持如下操作系统:
    • Windows (x86/x64)
    • Mac OS X
    • Linux/Unix (x86/x64)
    • Solaris Unix(x86/x64/SPARC)
  2. 解压文档 HC_Server.zip
  3. 启动服务器
    提示:为什么启动方式是批处理或脚本方式,而不是执行文件?
    1. 因为脚本启动方式更加透明,同时方便高级用户定制个性化启动(如安全策略)。
    2. 批处理执行已签名认证的Java包,并下载最新签名应用包。
    • Window用户:进入目录Window双击"HomeCenter.bat"
    • Mac OS X用户:
      • 普通用户:进入目录MacOSX解压"MacOSX.zip",双击"HomeCenter"
      • 高级用户:进入目录Linux不是MacOSX双击"HomeCenter.command"
    • Linux用户:进入目录Linux双击"HomeCenter.sh"
  4. 输入新密码,点击“确定”,服务器端将初始化以等待手机端接入。

更多教程步骤指南,请点击教程

部分早期操作系统在屏幕保护或锁屏状态下,手机访问远程桌面将无内容,敬请关闭屏保或禁用锁屏

2. 服务器使用、开发、设计教程

进入教程

3. 密码正确,为何不能连上

  1. 情形一:如果服务器端创建了新证书,并“禁止传输”。这样手机端的证书便自动失效,从而被拒绝连接。
  2. 情形二:如果该帐号被输入十次错误密码,该帐号被自动锁定,从而拒绝所有连接。重启服务器,将重新计数

4. 帐户及密码存储在HomeCenter.MOBI吗

  • 普通用户,没有任何信息或密码存储在HomeCenter.MOBI。
  • 密码不在互联网中被传送

5. 什么是数据中继或中继服务器

  • 有些服务器端网络环境可能处于防火墙或路由器后,导致手机移动端不能直连服务器
  • 在此情形下,数据被加密并通过三方或HomeCenter.MOBI来中转
  • 您的服务器端有可能为其它用户提供数据中转
  • 如果您的手机连通依赖于中转,而非直连,则色彩级别和刷新频度受限
  • 手机直连优先级最高,其次是中转,如果中继服务达到接入上限数量,请稍后重试。

6. 证书是什么,如何使用

  • 证书是一串随机数字串,被用来验证身份和加密传输数据。
  • 证书可根据用户需要,在服务器端生成,并在手机初次接入时,传输并复制到手机端。
  • 被传送的数据是通过用户密码、证书和自定制加密器(在文件"hc_config.properties"中配置条目 "encryptClass=hc.core.util.DefaultUserEncrypter",可使用自制加密器)来进行加密的。
  • 初始安装服务器和手机后,证书都是一样的。

使用证书步骤
  1. 右击托盘图标
  2. 点击 "创建证书" 菜单项
  3. 稍后会显示成功提示
  4. 确保 "传送证书" 是“有效”状态,显示图标 ()。如果您的手机证书是旧的,服务器端会在手机连接时,将证书传送并存储到手机上
  5. 如果 "传送证书" 状态为无效,显示 (),手机将不能获得新证书。没有更新证书的手机端,无法进入后续密码验证及接入服务

7. 无法启动服务器端,没有显示启动画面

内存不足或运行程序较多。
  • 关闭并退出部分应用
  • 如果硬件内存较小,请修改部分参数。
    1. 退出 服务器端
    2. Windows环境,编辑 文件 "HomeCenter.bat"
      Linux / Unix系统, 编辑 文件 "HomeCenter.sh"
    3. 添加 "-Xmx100m"到命令行
    4. 保存 文件
    5. 重启 服务器端

8. 允许自定制加密器以提升传输安全吗

当然可以。
  • 即便网络处于低安全环境下,普通用户仍无需使用自定制加密器。
  • 无定制加密器下,证书传输和数据接收仍是受高效加密的。
  • 如果您仍想提升安全,参见以下步骤

  1. 退出服务器端
  2. 编辑 文件 "hc_config.properties"
  3. 添加修改 条目 "encryptClass=hc.core.util.DefaultUserEncrypter"。如果 encryptClass 是你自己设计的, 切勿 放置到 hc.jar 文件中。因为 hc.jar 将在升级过程中被替换。
  4. 例如: "encryptClass=my.abc.MyEncrypter", 创建 目录 my\abc, 并 复制 MyEncrypter.class 文件到目录 C:\Program Files\HomeCenter\my\abc\下, 目录 C:\Program Files\HomeCenter\是您的安装目录。MyEncrypter.class 必须 编译在 java 1.4,因为某些1.5和1.6的java编程特性将不被MIDP(手机端标准)支持
  5. 添加修改 条目 "encryptData=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"。 hc.core.util.DefaultUserEncrypter 依赖于这些来初始化。
  6. 注意 hc_config.properties 必须以 ISO-8859-1 编码来保存。参见 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Properties.html
  7. 保存 文件, 重启 服务器端
  8. 打开 日志文件,一般显示 2012-01-30 15:30:53.703 Enable user Encrypter [hc.core.util.DefaultUserEncrypter]
  9. 打开 J2ME MIDP 手机端安装文件 "hcME.jar"
  10. 编辑 文件 "hc/hc_config.properties"
  11. 添加 条目 encryptClass=hc.core.util.DefaultUserEncrypter
  12. 添加 条目 encryptData=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
  13. 注意 hc/hc_config.properties 以编码 ISO-8859-1 存储。本系统,所有资源文件(除properties文件)都以 UTF-8 编码
  14. 安装 文件 hcME.jar 到手机中

开发环境 : https://blogs.oracle.com/javamesdk/entry/how_to_integrate_java_me
自定义加密器源代码须遵循 CLDC 1.0MIDP 2.0
hc.core.util.DefaultUserEncrypter.java
public class DefaultUserEncrypter implements hc.core.util.IEncrypter {
	final String encryptData = (String)IConstant.getInstance().getObject("encryptData");
	final byte[] encryptBS = toByteArr(encryptData);
	final int encryptLen = encryptBS.length;
	
	private static byte[] toByteArr(String encryptData){
		try {
			if(encryptData != null){
				return encryptData.getBytes("UTF-8");
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890zyxwvutsrqponmlkjihgfedcba".getBytes();
	}
	public void decryptCertKey(byte[] data, int offset, int len) {
		int modeK = 0;
		final int endIdx = offset + len;
		for (int i = offset; i < endIdx; i++) {
			data[i] = (byte)(data[i] ^ encryptBS[modeK++]);
			if(modeK == encryptLen){
				modeK = 0;
			}
		}
	}

	public void decryptData(byte[] data, int offset, int len) {
		int modeK = 0;
		final int endIdx = offset + len;
		for (int i = offset; i < endIdx; i++) {
			data[i] = (byte)(data[i] ^ encryptBS[modeK++]);
			if(modeK == encryptLen){
				modeK = 0;
			}
			i += 3;
		}
	}

	public void encryptCertKey(byte[] data, int offset, int len) {
		int modeK = 0;
		final int endIdx = offset + len;
		for (int i = offset; i < endIdx; i++) {
			data[i] = (byte)(data[i] ^ encryptBS[modeK++]);
			if(modeK == encryptLen){
				modeK = 0;
			}
		}
	}

	public void encryptData(byte[] data, int offset, int len) {
		int modeK = 0;
		final int endIdx = offset + len;
		for (int i = offset; i < endIdx; i++) {
			data[i] = (byte)(data[i] ^ encryptBS[modeK++]);
			if(modeK == encryptLen){
				modeK = 0;
			}
			i += 3;
		}
	}

	public void initEncrypter(boolean isMobileSide) {
		System.out.println("Call initEncrypter method");
	}

	public void setPassword(byte[] password) {
		System.out.println("Call setPassword method");
		int modeK = 0;
		for (int i = 0; i < encryptBS.length; i++) {
			encryptBS[i] = (byte)(encryptBS[i] ^ password[modeK++]);
			if(modeK == password.length){
				modeK = 0;
			}
		}
	}

	public void setUUID(byte[] uuid) {
		System.out.println("Call setUUID method");
		int modeK = 0;
		for (int i = 0; i < encryptBS.length; i++) {
			encryptBS[i] = (byte)(encryptBS[i] ^ uuid[modeK++]);
			if(modeK == uuid.length){
				modeK = 0;
			}
		}
	}

	public void notifyExit(boolean isMobileSide) {
		System.out.println("When mobile or PC exit, It will be called.");
	}
}
初始加载 hc.core.util.DefaultUserEncrypter.java,显示如下:
Call setUUID method
Call setPassword method
Call initEncrypter method

9. 设置色彩级别为5,但是显示仍是低色彩

  1. 如果手机是直连服务器端,并且依赖于数据中继,会出现此情形
  2. 为了帮助更多用户使用中继,我们限制了中继用户的色彩和刷新频度

10. 设置服务器刷新频度为1000毫秒,即1秒;但实际仍旧是三秒

参见上条

11. 可以使用Java安全策略文件(Java PolicyFile)吗

没问题

配置Java安全策略文件来运行Java系统,是一种保护系统的好方法。

参考如下:
  1. 退出 服务器端
  2. 视窗环境下, 编辑 文件 "HomeCenter.bat"
    Linux / Unix环境, 编辑 文件 "HomeCenter.sh"
  3. 创建 策略文件, 添加 "-Djava.security.policy=XXpolicy" 到命令行中。
    了解策略文件
注意:对于非视窗操作系统,请给予足够权限到目录 /home/HomeCenter/ ,假如这是安装目录。系统会升级时更新或新建文件及配置文件。

12. 手机显示全黑,如果Windows XP处于登录界面

手机会显示全黑,如果服务器端运行正常并且Windows XP处于登录界面。如果台式电脑或服务器需要自动登录并进入用户使用界面,请开启Windows XP的自动登录。
  • 创建帐户,客户级别(Guest),例如"RemoteMobile"。建议不要 管理员级别
  • 开启帐号"RemoteMobile"的自动登录功能。具体操作参见本文
  • 添加HomeCenter服务端程序到自动启动项,以便能自动运行随系统启动。
  • 采用客户级别(guest)帐户来远程控制服务器,较之管理员级帐号(administrator)更加安全。

13. 我的手机是Windows CE/Mobile,不能直接运行J2ME,该如何办?

Sun (now Oracle) phoneME for Windows CE/Mobile
http://davy.preuveneers.be/phoneme/?q=node/1

14. 所有的程序包都是HomeCenter原装验证(verify),且没有被篡改吗?

自版本5.6.93以来,增加了文件hc.pem,该文件是一个X509的公钥,全部jar文件 (含自动升级的) 都是通过它在启动或下载后进行校验。
如果公钥文件不一致或jar被篡改,则HomeCentere服务器将报错并中止。
内容如下:
-----BEGIN CERTIFICATE-----
MIIEpjCCAw6gAwIBAgIEURMYujANBgkqhkiG9w0BAQQFADCBkzELMAkGA1UEBhMCQ04xDjAMBgNV
BAgTBUh1bmFuMREwDwYDVQQHEwhTaGFvWWFuZzEfMB0GA1UEChMWdmVyaWZ5LkhvbWVDZW50ZXIu
TU9CSTEfMB0GA1UECxMWdmVyaWZ5LkhvbWVDZW50ZXIuTU9CSTEfMB0GA1UEAxMWdmVyaWZ5Lkhv
bWVDZW50ZXIuTU9CSTAgFw0xMzAyMDcwMzAwMTBaGA8yMTExMDkwMjAzMDAxMFowgZMxCzAJBgNV
BAYTAkNOMQ4wDAYDVQQIEwVIdW5hbjERMA8GA1UEBxMIU2hhb1lhbmcxHzAdBgNVBAoTFnZlcmlm
eS5Ib21lQ2VudGVyLk1PQkkxHzAdBgNVBAsTFnZlcmlmeS5Ib21lQ2VudGVyLk1PQkkxHzAdBgNV
BAMTFnZlcmlmeS5Ib21lQ2VudGVyLk1PQkkwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
gQCp6Q3eD6uTncaCntXoPsRIFWh6rsWd8DaDPxxz/+OG3g7xcaGEnBlYesJHaS3H3R+yHhxRrKK7
qAHXqaLZrJdRdlXftZdsoNxmQWyo7lIJV6Gm/1zk5bYzxAbq/nbZzOse5yR6AVDUHvt7ndBYrRWU
mx4pXHyHNmmoXDxjH+KqCB3PziRy5XEgDGeoTzBsc7e0yy+EluacQiosi/NclXRqWkuPAj1FWcay
znoTlgJR7sAdTFeKVcdvlgOoHU2COZrvrPKmKlNX35HTHph9ovtfwfKNTqomlcQKQr4EJbQwCU7D
3JwU1stLSeV7yd4nNRyLHvbMyuDRVnh3YMQPcc8jKJ6Fk5vgc6rDtA4V4pdGVgC8gznIyjJqvud+
51r6mnKLAJZP+bkCTWvGqCyQEGeGwnADE+7pGBf2G7oZNaB0aGeGhJwTgbo1Z1VJU9ynrUALJFj+
6PEgLVBUJhqU6sVny9IBkBlV8KZ5tYymHfqwLugvivfN3FSpJPnNupU2TRUCAwEAATANBgkqhkiG
9w0BAQQFAAOCAYEAlKemxDPZ8ojk03RPtkJxnz6WDeQEn9xfwm/ON07edsC5ZIf19uBoQI4iG8B3
LOghA62ohmLKbx8nTAIrCUGltN0On9ZZ7GuvmtiN0W3XHDR2L59pQaY2fS1/3u+IbmqCYP4CGMi6
YDm96T5mQ9W8pJ6tcs0/MyLG5RkcFjhVEe7XMKx6Yi+kehY8+vtDwr36ENL7mZ5EmSXMHR4vy6AK
xbO9u/Nzpbe5c0EUFtph8TiC2c/aclxLHlWT/ykkRMFVYz5nhV6skbk1QJgR9L13Ou0lDmCatBgb
lpCjHEP5b8txEf+gQuvmrTWZYMWPwdlcBFFagPWRDy+wVO8rQDGqezOplKbf0wPNRVKNKodBZZP2
d08C9wK5O1fVa+bPmlQ0Z/r5usgCUeRyIBOLYpHvgjKE5EHef9qVrHrkMKaX+8pI3UvbESpljLpJ
pq3Si8+5g+SeJLQdd62kaHPbNwExro8RMO7H9gLzW3bDYcW4kj50UV1xn570urB1Dd7ZgWKt
-----END CERTIFICATE-----