局域网聊天系统的设计与实现-毕业论文 - 图文(6)

2019-05-17 14:27

第4章 系统实现

4.1聊天子系统的实现

(1)聊天子系统主要实现要点:

1)用户首先登录验证,通过new 一个socket,先跟服务器端建立连接,服务器连接成功后把这个socket交给线程池,然后把用户信息在此次通信socket里,进行分离,看操作命令,如果是检测用户命令,则拿到数据库中用户表去查询,如果验证不成功把原因反馈给用户,并关闭此次连接,如果存在,服务器则更新在线人数,并把在线人数和自己的用户名发给所有的用户;把用户名和输出流放到一个map集合中;同时把此次的socket和用户名保存到另一个map集合中;利用输出流返回客户端。

2)用户上线时,用户验证通过后,先返回一个消息,通知客户端,让他打开好友管理界面,把服务器在线的名字全部接收过来,对于本客户端,则把服务器给我的名单加载我的列表中,其他客户端上线或下线时,则自动更新自己的好友列表。

3)用Jtree来描述好友列表,自动增删Jtree节点不太容易,并且添加节点不注意会添加重复的,因此选择把用一个Set集合来存放名字,作为一个中间变量,对于名字的增删在Set集合中操作,每一次操作完之后,把Jtree清空,重新添加。

4)对于聊天窗体对象的问题,为了实现只要在线就能接受好友的信息,采用List集合来存储聊天对象,有多少好友包括群,就创建多少聊天窗口对象,只要更新好友,就创建。只是不让它显示,这样就能保证只要在线就能收到消息

5)关于socket关闭的问题,当客服端在登陆时,如果用户验证不通过,则先关闭服务器端的socket通信连接,然后再关闭当前对象的socket通信;当客服端已经与服务器建立了连接,即登陆成功时,需要关闭时,先要通知服务器,让服务器把当前跟自己通信的socket关闭连接这样才能才能让服务器,结束当前与之当前交互的线程,把时间片留给其它线程,还能够统计客服端下线的等功能。 (2)Chat客户端实现部分代码如下:

/**

* 发送消息给服务器 * @param name 本机客户端 * @param objectName 目标客户端

* @param message 消息内容 注:这时不需要考虑message中是否包含分隔符 */

public void sendMessageToServer(String name, String objectName,

String messageType,String message) {

25

因为服务器按顺序取

}

if (message.equals(\ }

message = \保证服务器,发空白

pw.println(messageType + SEPSTR + name + SEPSTR + objectName + SEPSTR

+ message);

/**

* 关闭通信 */

public static void closeSocket() { }

if (pw != null) { } try { }

if (socket != null) { }

pw.println(CLOSESOCKET);// 通知服务器关闭

socket.close();

} catch (IOException e) {

(3)Chat服务器端实现部分代码如下:

/**

* 初始化服务器相关内容 */

public Server() {

try {

serverSocket = new ServerSocket(8182);

ip = InetAddress.getLocalHost().getHostAddress(); port = serverSocket.getLocalPort();

allPw = new HashMap(); threadPool = Executors.newFixedThreadPool(120); sockets = new HashMap(); onlineNum = 0; // sendOnlineList(); e.printStackTrace();

26

} catch (IOException e) {

}

}

/**

* 服务器开始工作 */

public void serverStart() { } /**

* 关闭服务器 */

public void serverClose() {

//先通知每个客户端,服务器要停止了

String message=\由于系统升级维护中,你也被迫掉线,请稍候重新登录\f = true;

doEve = new Thread() { };

doEve.start();

@Override

public void run() { }

while (f) { }

try { }

socket = serverSocket.accept();

threadPool.execute(new SendClientMessage(socket)); try { }

} catch (Exception e) {

serverSocket.close(); e1.printStackTrace();

} catch (IOException e1) {

sendClientMessageToOtherClient(\GROUPSEND,SERVERSTOPMESSAGE,mess

//方式一:遍历集合中的key,再用遍历器 // 先关闭服务器

27

age);

}

Set keys = sockets.keySet();

//由于sockets集合在不断的更新,所以遍历会出现异常//解决:将keys先转化为数组

String []keyArr=keys.toArray(new String[]{}); for(int i=0;i

f = false;// 停止链接 try { }

String key=keyArr[i]; try { }

sockets.get(key).close(); e.printStackTrace(); } catch (IOException e) {

ConcurrentModificationException

sockets.clear();//清空所有的socket

serverSocket.close(); e.printStackTrace();

} catch (IOException e) {

4.2 Web前端子系统的实现

4.2.1商品展示模块的实现 (1)主要实现要点:

商品展示模块主要实现的功能有在首页默认分页浏览所有商品,查看商品排行榜,还可以通过商品名称检索或分类查询所得的结果集进行分页展示,这里最重要的一点就是三种方式中分页功能要分别实现;然后就是展示商品详情的时候,需要把查询几个跟该种类相同的商品作为猜你还喜欢的部分,来增加页面显示的内容,给用户的快捷的选择。这里最总要的实现有两点,一是自己发布的商品不允许购买,而是加入购物车只能一次。 (2)其中实现进入首页的部分java代码如下:

public List getCommodities() {

}

return commodities;

public void setCommodities(List commodities) {

28

}

this.commodities = commodities;

public String execute(){ }

ICommodityDao commodityDao=DaoFactoryUtil.getCommodityDao(); totalPage=commodityDao.totalPage(myPage); if(page!=0){ } try { }

return \

commodities=commodityDao.findByPage(myPage); e.printStackTrace(); return \} catch (Exception e) {

myPage.setPage(page);

4.2.2订单处理模块的实现 (1)主要实现要

1)订单处理和购物车管理都有一个实现的共性,那就是采用商品容器对象,商品容器就是用来描述你所选择的商品,它有三个属性,分别是所选商品集合、所选商品总金额、所选商品总件数,所选商品集合又是由所选择的每件商品及对应的数量、金额属性所组成。这样实现的目的有两个,一是为了好管理和统计商品容器中的信息;二是为了使商品容器的功能能够得到共享,比如可以构造成一个购物车,或者直接用在确认订单信息和查看订单详情时。

2)订单处理另外一个重要的地方就是商品在成功购买时,数据库中的库存量要相应的进行变化。

(2)其中实现确认订单信息的部分java 代码如下: //判断session中是否包含haveDifferOper,有,则移除

if(mySession.containsKey(\ }

//获取用户默认的收货地址

User user =(User) mySession.get(\defaultAddress=user.getAddress()+\

\

mySession.remove(\

(\收) \

29


局域网聊天系统的设计与实现-毕业论文 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:八年级思品下册(全)教案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: