rochoc
关于java、cobol、zos
BlogJava
::
首页
::
联系
::
聚合
::
管理
6 Posts :: 1 Stories :: 21 Comments :: 0 Trackbacks
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔档案
(6)
2009年1月 (5)
2008年12月 (1)
文章分类
(1)
COBOL
JAVA(1)
ORACLE
文章档案
(1)
2009年1月 (1)
搜索
最新评论
1. re: CS结构软件自动升级实现(一)
评论内容较长,点击标题查看
--qupdater
2. re: CS结构软件自动升级实现(一)
评论内容较长,点击标题查看
--rochoc
3. re: CS结构软件自动升级实现(一)
@ lmlm3000
下面把我已经在Linux上测试通过的代码放上来
--rochoc
4. re: CS结构软件自动升级实现(一)
@ lmlm3000
因为家里没有LINUX系统,我周一去公司试一下,看能否解决
--rochoc
5. re: CS结构软件自动升级实现(一)
关注下HttpComponents,用该包的话,使用request,header非常方便
-- lmlm3000
阅读排行榜
1. CS结构软件自动升级实现(一)(6809)
2. CS结构软件自动升级实现(二) (2904)
3. CS结构软件自动升级实现(三)(2588)
4. CS结构软件自动升级实现(四)(2022)
5. 希望这里不要随便清用户(273)
评论排行榜
1. CS结构软件自动升级实现(一)(18)
2. CS结构软件自动升级实现(四)(2)
3. CS结构软件自动升级实现(三)(1)
4. CS结构软件自动升级实现(二) (0)
5. 如何让文章出现在BLOGJAVA的首页?(0)
CS结构软件自动升级实现(二)
上次写完(一)实现总体说明后,一直想把源码放上来,但一直没有时间,今天趁周末把这个写完整,今天主要是附上实现源码,供有需要的朋友参考,当然也希望大家多多指教。上篇文章讲到了这个实现是基于SOCKET实现的,当然通讯协议是自定义,上一篇也有朋友说采用http协议比较简单,当然这个也是一种方法,但要使用http协议,则服务端要有http服务这样会导致服务端过于庞大。
本实现包括:
1、AUPD.java 服务端和客户端之间的通讯协议
2、AutoUpdateServer.java 服务端的监听进程
3、AUpdSrvProc.java服务端的服务线程,用于处理客户端的自动升级请求
4、ClientVerParser.java服务端服务线程用于解决客户端版本信息的类
5、AutoUpdateClient.java客户端的自动升级请求进程
6、Config.java用于服务端和客户端读取本地配制文件的类
7、UpdFile.java用于文件传输的文件对像
本实现用dom4j作为解释xml的引擎
AUPD.java :
1
/** */
/**
******************************************************************
2
* 项目名称 :rochoc<p>
3
* 包名称 :com.rochoc.autoupdate<p>
4
* 文件名称 :AutoUpdProtocol.java<p>
5
* 编写者 :kfzx-luoc<p>
6
* 编写日期 :2008-12-22<p>
7
* 程序功能(类)描述 :<p>
8
* 定义自动升级客户端与服务端的通讯协议
9
* 程序变更日期 :
10
* 变更作者 :
11
* 变更说明 :
12
*******************************************************************
*/
13
package
com.rochoc.autoupdate;
14
15
/** */
/**
16
*
@author
kfzx-luoc
17
*
18
* TODO To change the template for this generated type comment go to
19
* Window - Preferences - Java - Code Style - Code Templates
20
*/
21
public
class
AUPD
22
{
23
/** */
/**
24
* 无意义操作
25
*/
26
public
static
final
String NONE
=
"
NONE
"
;
27
28
/** */
/**
29
* 发送客户端版本信息
30
*/
31
public
static
final
String SEND_CLIENT_VERSION
=
"
SENDCVER
"
;
32
33
/** */
/**
34
* 接收客户端版本信息
35
*/
36
public
static
final
String RECEIVED_CLIENT_VERSION
=
"
RECDCVER
"
;
37
38
/** */
/**
39
* 发送文件全路径
40
*/
41
public
static
final
String SEND_FILE_ABSOULT
=
"
SENDFILE
"
;
42
43
/** */
/**
44
* 接收文件全路径
45
*/
46
public
static
final
String RECEIVED_FILE_ABSOULT
=
"
RECDFILE
"
;
47
48
/** */
/**
49
* 开始文件传输
50
*/
51
public
static
final
String START_TRANSMIT
=
"
STARTTSM
"
;
52
53
/** */
/**
54
* 结束文件传输
55
*/
56
public
static
final
String TERMINATE_TRANSMIT
=
"
TERMTSMT
"
;
57
58
/** */
/**
59
* 更新失败
60
*/
61
public
static
final
String UPDATED_FAILURE
=
"
UPDEFAIL
"
;
62
63
/** */
/**
64
* 更新成功
65
*/
66
public
static
final
String UPDATED_SUCCESSFUL
=
"
UPDESUCC
"
;
67
68
/** */
/**
69
* 无需更新
70
*/
71
public
static
final
String NOTNEED_UPDATED
=
"
NNEEDUPD
"
;
72
73
/** */
/**
74
* 已经准备好接收更新文件
75
*/
76
public
static
final
String READY_TO_UPDATE
=
"
READYTUP
"
;
77
78
/** */
/**
79
* 结束链接
80
*/
81
public
static
final
String BYE
=
"
BYEBYEOK
"
;
82
83
/** */
/**
84
* 数据区OFFSET
85
*/
86
public
static
final
int
DATA_OFFSET
=
5
;
87
88
/** */
/**
89
* 文件数据块大小
90
*/
91
public
static
final
int
DATA_SIZE
=
1024
;
92
93
/** */
/**
94
* 发送缓冲区大小
95
*/
96
public
static
final
int
BUFFER_SIZE
=
DATA_SIZE
+
1
+
4
;
//
[0]位是标志位,区分数据和命令 + 4位长度
97
98
/** */
/**
99
* 数据段标识
100
*/
101
public
static
final
int
MARK_DATA_SECT
=
0
;
102
/** */
/**
103
* 命令段标识
104
*/
105
public
static
final
int
CMD_DATA_SECT
=
1
;
106
107
/** */
/**
108
* 数据段结束标识
109
*/
110
public
static
final
int
MARK_DATA_END
=
127
;
111
}
112
AutoUpdateServer.java :
1
/** */
/**
******************************************************************
2
* 项目名称 :rochoc<p>
3
* 包名称 :com.rochoc.autoupdate<p>
4
* 文件名称 :AutoUpdateServer.java<p>
5
* 编写者 :kfzx-luoc<p>
6
* 编写日期 :2008-12-22<p>
7
* 程序功能(类)描述 :<p>
8
* 自动更新服务端
9
* 程序变更日期 :
10
* 变更作者 :
11
* 变更说明 :
12
*******************************************************************
*/
13
package
com.rochoc.autoupdate;
14
15
import
java.io.IOException;
16
import
java.net.ServerSocket;
17
import
java.net.Socket;
18
19
/** */
/**
20
*
@author
kfzx-luoc
21
*
22
* TODO To change the template for this generated type comment go to
23
* Window - Preferences - Java - Code Style - Code Templates
24
*/
25
public
class
AutoUpdateServer
extends
Thread
26
{
27
private
int
port
=
0
;
//
服务端口号
28
private
Config config
=
Config.getInstance();
//
配置文件对像
29
private
ServerSocket srvSocket
=
null
;
30
public
AutoUpdateServer()
31
{
32
port
=
Integer.parseInt(config.getServerPort());
33
try
34
{
35
srvSocket
=
new
ServerSocket(port);
36
//
setTimeout(60000);
37
this
.start();
38
Config.print(
"
自动更新服务器在端口'
"
+
port
+
"
'监听
"
);
39
}
catch
(IOException e)
40
{
41
e.printStackTrace();
42
}
43
}
44
void
setTimeout(
int
millis)
throws
IOException
45
{
46
if
(srvSocket
!=
null
)
47
{
48
srvSocket.setSoTimeout(millis);
49
}
50
}
51
void
close()
throws
IOException
52
{
53
if
(srvSocket
!=
null
)
54
{
55
srvSocket.close();
56
}
57
}
58
/** */
/**
59
*
@author
kfzx-luoc
60
*
61
* 执行监听处理,如果有客户端连接上来,则判断是否需要更新,
62
* 如果需要更新,则给客户端传送最新版本文件
63
*/
64
public
void
run()
65
{
66
try
67
{
68
while
(
true
)
69
{
70
Socket clSocket
=
null
;
71
try
72
{
73
clSocket
=
srvSocket.accept();
74
Config.print(
"
客户端‘
"
+
clSocket.getInetAddress()
+
"
’连接成功
"
);
75
//
进行处理
76
AUpdSrvProc srvP
=
new
AUpdSrvProc(clSocket);
77
srvP.start();
78
}
catch
(IOException ioe)
79
{
80
try
81
{
82
clSocket.close();
83
}
catch
(IOException e1)
84
{
85
}
86
Config.print(
"
AutoUpdateServer proc client:
"
+
clSocket.getInetAddress().getHostAddress()
+
"
error,
"
+
ioe);
87
ioe.printStackTrace();
88
}
89
}
90
}
catch
(Exception e)
91
{
92
Config.print(
"
AutoUpdateServer running error,
"
+
e);
93
e.printStackTrace();
94
}
finally
95
{
96
try
97
{
98
srvSocket.close();
99
}
catch
(IOException e)
100
{
101
}
102
}
103
}
104
//
测试主函数
105
public
static
void
main(String args[])
106
{
107
AutoUpdateServer server
=
new
AutoUpdateServer();
108
server.run();
109
}
110
}
111
避免太大,其他源码见(三)
运行服务端:
java -cp .;.\bin;.\lib\dom4j-1.6.1.jar;.\lib\jaxen-1.1-beta-4.jar com.icbc.autoupdate.AutoUpdateServer
运行客户端:
java -cp ./bin;./lib/jaxen-1.1-beta-4.jar;./lib/dom4j-1.6.1.jar; com.icbc.autoupdate.AutoUpdateClient
posted on 2009-01-09 21:18
rochoc
阅读(2904)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
Copyright @ rochoc
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster