项目总结--阿怪快传

项目名称:阿怪快传


一、项目背景

在学习到Socket网络编程的时候,发现使用Socket套接字可以实现局域网内数据交互。然后就现学现卖,制作了一个可以简单实现聊天功能的小项目。项目完成之后,我在想,聊天也是一种数据传输,既然我可以实现聊天,应该也可以加上文件对端传输的功能,刚好也检验一下自己学习的成果。于是,阿怪快传就此诞生。

二、实现功能

1、文件对端快速传输传输速度可达70Mbps

2、通过局域网,实现一对一私聊,一对多群聊

3、可实现文件传输与聊天的同步进行

4、聊天模块中,实现了收发消息同步进行;

5、使用MySQL数据库存储用户信息,后期使用可直接登录;

三、设计思路

1、文件传输模块

    1)文件传输者向接收者发送sendFile,表明自己要发送文件;文件接收者回复Yes,表明自己准备好了接收文件,然后,输入文件存放的路径,路径经校验合格后,启动文件接收线程;

    2)文件接收线程启动新的serverSocket,等待文件发送端的socket连接;

    3)文件接收者回复Yes之后,服务端会给文件发送者发送sendNow,表明文件接收者已经做好接收准备;此时文件发送者需要输入文件路径,该路径经校验合格后,生成接收文件夹/文件,启动文件发送线程,然后提醒文件接收者,开始接收文件;

    4)文件发送线程会创建新的socket,并与文件接收端的serverSocket进行连接;连接成功之后,提醒文件发送者,已经开始发送文件了;

    5)文件传输的具体发送过程:文件发送端使用FileInputStream类的read()方法,不断读取源文件中的数据,并存入大小为1024*2的字节数组中,同时使用FileInputStream类的write()方法,不断将数组中的数据传送到文件接收端。当读取到的长度小于0时,表明已将源文件全部发送,此时提醒文件发送者,发送完成,然后关闭socket;

    6)文件传输的具体接收过程:文件接收端使用FileInputStream类的read()方法,不断读取接收到的数据,并将数据存到大小为1024*2的字节数组中,同时使用FileInputStream类的write()方法,不断将数组中的数据写入目标文件中。读取到的长度小于0时,表明已将接收到的数据全部写入到了文件中,然后提醒文件接收者,接收成功。然后关闭serverSocket;

    由于文件的发送与传输使用了两个不同的线程,所以此过程是同步进行的;

2、聊天模块

    1)首先启动serverSocket,作为服务端,然后使服务端不断循环等待客户端的连接,等待期间,使用者可手动关闭服务端,停止等待;

    2)通过使用线程池,对服务端不同的连接者(不同的客户端)进行同步服务。其中,线程池的核心线程数可由服务端创建者控制;

    3)客户端成功与服务端建立连接之后,会创建接收消息线程和发送消息线程,并持续运行,直至客户端断开连接。这两个线程可以实现用户发送消息与接收消息同步进行;

    4)存储用户信息:通过MySQL数据库,将所有注册过的用户信息保存起来,下次可直接登陆;

    5)记录在线用户:通过Map集合,将所有与服务端建立连接的用户的用户名以及Socket保存起来,用以记录当前有哪些用户在线。让用户退出之后,会将Map中与之对应的记录移除;

    6)私聊:消息发送者指定接收者的用户名,然后通过用户名在Map集合中找到与之对应的客户端,然后将消息发送至该客户端;

    7)群聊:通过遍历Map集合,将用户想要发送的消息发送给自己以外的所有在线客户端;

四、代码链接 https://github.com/Arivan7586/Items/tree/master/WeChat/src/main

五、项目效果

注册效果:

用户信息存储效果:

登陆效果:

 发送文件效果:

接收文件以及聊天效果:

 

六、项目总结

此项目传输文件的速度较快,并且能在传文件的同时进行聊天,基本达到了最初的设计要求。通过此项目,使我对多线程、Socket网络编程、I/O以及文件操作有了跟为系统的认识,对这些知识也有了一定的使用经验。

此项目仍有许多需要优化的空间,例如实现暂停接收文件、继续接收文件功能等;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值