当前位置: 技术问答>java相关
特急,特急,高手帮忙,感激不尽,感激不尽!!!
来源: 互联网 发布时间:2015-08-25
本文导语: 小弟本在C++上发展,谁知最近被调到网管部(电信网管),被迫用Java作开发。小弟只有c++基础(Java只懂点皮毛)。最近上面下来任务,说用两周时间做一员工管理系统(说是让我们熟悉环境而已)。具体需求如下: ...
小弟本在C++上发展,谁知最近被调到网管部(电信网管),被迫用Java作开发。小弟只有c++基础(Java只懂点皮毛)。最近上面下来任务,说用两周时间做一员工管理系统(说是让我们熟悉环境而已)。具体需求如下:
总体功能包括两部分:信息管理客户端和信息监视服务器
客户端实现员工的基本信息的编辑(增,删,改),查询,统计(以图表形式显示),以及相关结果的导出(导出为Execel文件)和打印功能。
信息监视服务器实现对客户端的启动.退出及相应的编辑操作监视。当用户在信息管理客户端进行编辑时,该监视器界面可实时显示客户端的操作和结果信息。
小弟用一天时间看了一下,打算如下处理:
***********************************************************
整体框架分客户端。服务器端。数据库三块
客户端实现界面功能,通过Tcp/IP与服务器连接,将所需实现功能及参数以字串形式发往服务器,由服务器实现
服务器始终处于监听状态,监听客户端状态并处理客户端的请求与数据库交互。服务器根据接受到的前n个字符判断请求命令,作出相应处理。
我看了几个例子:基本实现了两点之间通过Tcp/IP协议通讯,但只能做到两点通讯,通过ServerSocket实现监听,通过一个Socket实现通讯处理
***************************************************************
问题1:怎样实现一服务器对多终端通讯
///////////////////////////////////////
问题2:当客户端出现断开时,因出现异常通信断开,重启客户端后还可以建立连接,说明服务器还处于监听状态,但无法通讯,说明服务器端通讯线程结束,请问怎样使服务器端在通讯断开后,还能恢复到正常监听状态。
////////////////////////////////////////
问题3:怎样实现服务器与数据库的操作(数据库要求用Access),对java下的数据库操作,小弟一点不懂,请高手赐教,不尽感激
**************************************************************
此次任务关系到本人前途问题,希望各位高手多多提携,有何建议万望注明,多谢多谢
事成之后,有功之人,每人加30分(我分不多,只能如此),万望高手救小弟与水深火热之中。再次感谢,很急,两周时间,已过一天,救我啊
*************SOS********SOS*********SOS***************
*********注:小弟用JBuilder5作开发
总体功能包括两部分:信息管理客户端和信息监视服务器
客户端实现员工的基本信息的编辑(增,删,改),查询,统计(以图表形式显示),以及相关结果的导出(导出为Execel文件)和打印功能。
信息监视服务器实现对客户端的启动.退出及相应的编辑操作监视。当用户在信息管理客户端进行编辑时,该监视器界面可实时显示客户端的操作和结果信息。
小弟用一天时间看了一下,打算如下处理:
***********************************************************
整体框架分客户端。服务器端。数据库三块
客户端实现界面功能,通过Tcp/IP与服务器连接,将所需实现功能及参数以字串形式发往服务器,由服务器实现
服务器始终处于监听状态,监听客户端状态并处理客户端的请求与数据库交互。服务器根据接受到的前n个字符判断请求命令,作出相应处理。
我看了几个例子:基本实现了两点之间通过Tcp/IP协议通讯,但只能做到两点通讯,通过ServerSocket实现监听,通过一个Socket实现通讯处理
***************************************************************
问题1:怎样实现一服务器对多终端通讯
///////////////////////////////////////
问题2:当客户端出现断开时,因出现异常通信断开,重启客户端后还可以建立连接,说明服务器还处于监听状态,但无法通讯,说明服务器端通讯线程结束,请问怎样使服务器端在通讯断开后,还能恢复到正常监听状态。
////////////////////////////////////////
问题3:怎样实现服务器与数据库的操作(数据库要求用Access),对java下的数据库操作,小弟一点不懂,请高手赐教,不尽感激
**************************************************************
此次任务关系到本人前途问题,希望各位高手多多提携,有何建议万望注明,多谢多谢
事成之后,有功之人,每人加30分(我分不多,只能如此),万望高手救小弟与水深火热之中。再次感谢,很急,两周时间,已过一天,救我啊
*************SOS********SOS*********SOS***************
*********注:小弟用JBuilder5作开发
|
1.你可以用Thread建立连接,因为目前JDK1.3还没有直接提供方法来限制一个服务器无响应发生的连接超时(setSoTimeout是设定普通连接超时的,此时不适用)。大家常用的方法是为每个连接建立一个线程。这样多个线程可以同时服务多个客户,而且可以设置优先级。
2。“当客户端出现断开时,因出现异常通信断开,重启客户端后还可以建立连接,说明服务器还处于监听状态,但无法通讯,说明服务器端通讯线程结束,请问怎样使服务器端在通讯断开后,还能恢复到正常监听状态。"这段话?我估计你也没有用C++写过此类中等规模的项目,C++和Java大多数都是用多线程这样做的,很类似,如果以前用VC做过,你不会遇到困难,而且你会发现Java的线程用起来比VC太简单了。"异常通信断开"和服务器的侦听哪里有什么关系,侦听返回一个sock之后,交给一个新线程去处理,服务器马上继续侦听。所以你的第二个问题在这种设计模式下不存在。
3。Access可不是什么像样的数据库引擎,很少有人用Access的,只有对性能要求极低时才用它,建议你使用Oracle,如果对性能要求很高,建议IBM的DB2.不过没关系,用什么数据库都不影响你的编程,因为有了JDBC!先找一个JDBC驱动程序如PointBase,如果找不到,就用JDBC:ODBC网桥(不赞成使用)。
建议你看一看Ivor Horton的Beginning Java, 电子工业出版社有中译版--"Java编程指南",还有就是Cay Horstmann的Core Java, 机械工业出版社有中译版--“Java 2 核心技术”,再给你几段代码看一看(原自Core Java):
创建连接
public static Connection getConnection()
throws SQLException, IOException
{ Properties props = new Properties();
String fileName = "QueryDB.properties";
FileInputStream in = new FileInputStream(fileName);
props.load(in);
String drivers = props.getProperty("jdbc.drivers");
if (drivers != null)
System.setProperty("jdbc.drivers", drivers);
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
return
DriverManager.getConnection(url, username, password);
}
取数据集:
try
{ con = getConnection();
stmt = con.createStatement();
String query = "SELECT Name FROM Authors";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
authors.addItem(rs.getString(1));
query = "SELECT Name FROM Publishers";
rs = stmt.executeQuery(query);
while (rs.next())
publishers.addItem(rs.getString(1));
}
catch(Exception e)
{ result.setText("Error " + e);
}
再给你一个建连接的类
class SocketOpener implements Runnable
{ public static Socket openSocket(String aHost, int aPort,
int timeout)
{ SocketOpener opener = new SocketOpener(aHost, aPort);
Thread t = new Thread(opener);
t.start();
try
{ t.join(timeout);
}
catch (InterruptedException exception)
{
}
return opener.getSocket();
}
public SocketOpener(String aHost, int aPort)
{ socket = null;
host = aHost;
port = aPort;
}
public void run()
{ try
{ socket = new Socket(host, port);
}
catch (IOException exception)
{
}
}
public Socket getSocket()
{ return socket;
}
private String host;
private int port;
private Socket socket;
};
得到sock之后,再建个线程处理此连接吧。
总之,Java就是慢,但用起来比C++容易太多了。
这下总明白了吧?
如果还不明白,看看Core Java, 绝对好书。上面的代码均出自Core Java.
2。“当客户端出现断开时,因出现异常通信断开,重启客户端后还可以建立连接,说明服务器还处于监听状态,但无法通讯,说明服务器端通讯线程结束,请问怎样使服务器端在通讯断开后,还能恢复到正常监听状态。"这段话?我估计你也没有用C++写过此类中等规模的项目,C++和Java大多数都是用多线程这样做的,很类似,如果以前用VC做过,你不会遇到困难,而且你会发现Java的线程用起来比VC太简单了。"异常通信断开"和服务器的侦听哪里有什么关系,侦听返回一个sock之后,交给一个新线程去处理,服务器马上继续侦听。所以你的第二个问题在这种设计模式下不存在。
3。Access可不是什么像样的数据库引擎,很少有人用Access的,只有对性能要求极低时才用它,建议你使用Oracle,如果对性能要求很高,建议IBM的DB2.不过没关系,用什么数据库都不影响你的编程,因为有了JDBC!先找一个JDBC驱动程序如PointBase,如果找不到,就用JDBC:ODBC网桥(不赞成使用)。
建议你看一看Ivor Horton的Beginning Java, 电子工业出版社有中译版--"Java编程指南",还有就是Cay Horstmann的Core Java, 机械工业出版社有中译版--“Java 2 核心技术”,再给你几段代码看一看(原自Core Java):
创建连接
public static Connection getConnection()
throws SQLException, IOException
{ Properties props = new Properties();
String fileName = "QueryDB.properties";
FileInputStream in = new FileInputStream(fileName);
props.load(in);
String drivers = props.getProperty("jdbc.drivers");
if (drivers != null)
System.setProperty("jdbc.drivers", drivers);
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
return
DriverManager.getConnection(url, username, password);
}
取数据集:
try
{ con = getConnection();
stmt = con.createStatement();
String query = "SELECT Name FROM Authors";
ResultSet rs = stmt.executeQuery(query);
while (rs.next())
authors.addItem(rs.getString(1));
query = "SELECT Name FROM Publishers";
rs = stmt.executeQuery(query);
while (rs.next())
publishers.addItem(rs.getString(1));
}
catch(Exception e)
{ result.setText("Error " + e);
}
再给你一个建连接的类
class SocketOpener implements Runnable
{ public static Socket openSocket(String aHost, int aPort,
int timeout)
{ SocketOpener opener = new SocketOpener(aHost, aPort);
Thread t = new Thread(opener);
t.start();
try
{ t.join(timeout);
}
catch (InterruptedException exception)
{
}
return opener.getSocket();
}
public SocketOpener(String aHost, int aPort)
{ socket = null;
host = aHost;
port = aPort;
}
public void run()
{ try
{ socket = new Socket(host, port);
}
catch (IOException exception)
{
}
}
public Socket getSocket()
{ return socket;
}
private String host;
private int port;
private Socket socket;
};
得到sock之后,再建个线程处理此连接吧。
总之,Java就是慢,但用起来比C++容易太多了。
这下总明白了吧?
如果还不明白,看看Core Java, 绝对好书。上面的代码均出自Core Java.