广州大学网络编程实验一

广州大学学生实验报告

开课实验室:计算机科学与工程实验(电子楼 518B )     2021年  11 月  24 

完整代码请看文末!

学院

计算机科学与网络工程学院

年级、专业、班

 网络工程194

姓名

 jwt

学号

实验课程名称

网络编程实验

成绩

实验项目名称

TCP编程

指导老师

刘淼

一、实验目的

TCP协议是传输层中最重要的协议,它能满足应用对网络通信的高质量要求。通过完成本实验项目,巩固以前所学的面向对象的分析和设计技术,掌握TCP套接字的编程范型,熟悉Java对TCP协议的支持类的编程接口,并能熟练运用于TCP协议应用编程中。

二、实验设备及环境

学生用PC机(每人一台)、Windows操作系统、Java集成开发环境IntelliJ IDEA。PC机需连入局域网环境,并能连接Internet。

  • 实验内容

3.1需求分析

使用Java对TCP协议支持的相关类设计开发一个简单的网络聊天程序,实现下列功能:(本人负责服务器端开发)

  1. 用户功能:用户注册、登录、好友关系保存
  2. 跟好友一对一聊天
  3. 文件发送(仅限好友)
  4. 组建聊天室群聊

3.1.1 系统用例图

3.1.2 主要用例描述

用例号

1

用例名称

用户验证

参与者

服务器

操作过程

  1. 获取客户端发送的用户对象
  2. 判断是登录还是注册
  3. 执行sql语句完成用户验证
  4. 把验证结果发送给客户端
  5. 若登录成功则开启一个新线程
  6. 把用户Id和对应的线程放入线程管理集合ConcurrentHushMap

拓展点

用例号

2

用例名称

获取在线用户

参与者

服务器

操作过程

  1. 获取线程管理集合ConcurrentHushMap
  2. 迭代集合中的key(即用户Id),用字符串存储,规定相互之间用空格隔开

拓展点

根据数据库表Friend的好友关系结合获取在线用户,从而获取在线好友列表

(要获取在线好友是因为好友一对一私聊不支持离线聊天)

用例号

3

用例名称

接收/发送消息

参与者

服务器

操作过程

  1. 接收客户端请求
  2. 根据客户端请求消息类型、发送者、接收者来发送消息给相应的客户端
  3. 支持发送文件给客户端

拓展点

3.2系统设计

3.2.1 主要用例顺序图

3.2.2 系统类图

3.3 测试

首先开启服务器,然后开启客户端,测试注册/登录功能,如图所示,在客户端点击注册或登录后,服务器这边会执行相应的sql语句来完成相应功能。注册完成后,登录三个客户端进行后续的功能测试。

  登录后,展示功能菜单页面,点击“查看在线用户”后弹出在线用户列表,用户可以在此选择用户来添加好友;如图,ljf添加jwt成功。然后点击在线好友列表,会显示jwt在线,可以对其发消息或者发送文件。(好友添加是双向的,在另一边也可以看到有相应的好友关系,也可以进行私聊、发文件功能)。

  如图,jwt对ljf发了个“你好”,在ljf客户端这边即使没打开好友私聊界面,在他收到消息后也会自动弹出界面;然后双方互相发送消息,可以正常聊天。

再测试好友之间的发送文件功能,点击发送文件,会弹出一个文件选择页面,用户可以筛选不同类型的文件,也可以选择文件路径输,选择好文件后点“打开”即可发送到对方的硬盘下存储;查看本地D盘下的文件夹,该文件已收到。

  多人聊天:首次加入的时候会向别人发送一个xxx加入了聊天室,各自说的话,加入聊天室的用户都可以接收到。

  最后,测试退出功能,在客户端的菜单页面点击“退出”或者右上角的×都可以正常退出,服务器这边显示用户退出连接,达到正常退出效果,客户端正常关闭,没有抛异常。

四、实验总结

  本次实验涉及到的java知识较多,综合运用了线程、流、集合、网络编程等方面的知识,是一个综合性较强的实验,而且本次是两人合作的实验,更加考验两个人之间怎么讨论交流设计。

  首先要设计一个整体的框架基础:后台的用户注册/登录验证、还有查询好友列表使用mybatis框架进行数据库操作,从数据库中读取内容;还有最重要的是消息发送方面,考虑到涉及了多个不同的请求——注册、登录、拉去在线用户、加好友、获取在线好友、私聊发消息、群发消息、发送文件、退出系统,针对这些,我们把消息封装成一个类Message,类里边包含有发送者接收者、发送内容、消息类型(用于鉴别是什么请求)、字节数组(发送文件用)、文件目的路径、文件源路径。那么,客户端这边只要把要发送的不同消息在Message对象里设好,获取socket的输出流后,用objectOutputStream就可以发送Message对象过去,服务器提取Message对象的发送者接收者还有发送类型进行相应的转发即可。

  服务器处理:用户注册成功后,socket会关闭,防止用户注册后登录别的账户导致该socket没法正常关闭;登录成功后才开启线程,线程持有socket,把用户Id和线程放到ConcurrentHashMap里进行线程管理。所以,当用户发来获取在线用户请求,只需要迭代遍历一下集合即可知道有什么用户在线;其他聊天、发文件正常转发;收到退出请求的时候,服务器会回复客服端一个退出消息,然后sleep3000),确保让用户端收到退出消息正常退出,然后服务器关闭该socket,达到正常退出效果。

Pass:图片可下载完整实验报告查看

TCP编程完整代码(客户端和服务端)

UDP编程完整代码

csdn官方下载可能要money,改成网盘链接了(不能让师弟师妹乱花钱):链接:https://pan.baidu.com/s/14Xn4NJtqb0NFOe2hJA1lZg 
提取码:hpiy 
--来自百度网盘超级会员V6的分享

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值