基于JAVA实现的简单聊天工具

Jonesy

发布日期: 2019-02-11 12:17:52 浏览量: 139
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

一、描述

本聊天程序,是基于TCP传输协议的两用户即客户端与服务端之间的通信,是一种一对一的通信方式。程序只涉及单线程编程,所以只能实现两个端口之间的通信,通信包括文本信息的输入传输显示,以及单个文件的传输。

1.1 连接服务器

聊天时应该是一端先运行服务端,会显示本机的ip地址以及监听的端口号,此时服务端等待客户端连接。

另一端运行客户端,然后客户端输入服务端的ip地址以及服务端的监听端口号,连接服务端,连接成功后就能实现两端之间的通信了。

1.2 聊天界面

连接成功后,每一端会弹出一个聊天界面,包含一个聊天记录显示窗口,一个文字输入窗口,还有三个按钮,分别是发送,发文件,清除。

1.3 发送、发文件及清除按钮

发送就是发给对方消息。点击发文件按钮回将此时文本输入框中的内容发给对方,同时显示在自己的聊天记录窗口中。注意当你发送的内容为空时,会提示你不能发送空内容,弹出一个提示窗口。

发文件按钮是用来选择要发送的文件的。按发文件按钮后会出项一个文件选择对话框,然后用户可以选择要传输的文件,选择文件后,需要等待对方接收才能发送,对方接收后,会提示可以发送了,此时点击发送按钮便可以发送此文件,如果对方取消接收则会提示发送失败。当对方想发文件时,文件接收端会弹出一个文件路径选择对话框,用户可以通过此对话框选择文件的保存路径,当然用户也可以点击取消按钮,取消文件接收。

清除按钮用来清除聊天记录。当你点击清除按钮后,第一个文本区的内容即聊天记录就删除了。

二、设计

2.1 总体设计

聊天程序是通过socket先链接,再聊天通信的软件。而本程序实际上是服务端与客户端之间通信的程序,应该先运行服务端,并且监听一个服务端口,等待客户连接。然后客户端通过服务端的ip以及监听的端口号,即socket连接服务端,然后进行通信。

考虑到在dos界面下只能实现两个人时之间的同步通信,而对于更加方便的异步通信却无法实现,所以应该加入图形界面,这样通过在聊天窗口中对话通信,实现异步通信的目的。聊天就是文本形式的对话,在客户端与服务端之间传输,而文件传输也是如此,因此聊天最重要的就是对输入输出流的操作,通过输出流向对方发消息,通过输入流接收对方发来的消息。

2.1 通信连接

服务端端先实例化一个ServerSocket对象,打开一个监听端口5555,通过此对象的accept()方法,监听此端口,等待客户的连接。此时,客户端通过Socket(ip,5555)实例化一个Socket对象,并且试图去连接由此ip与5555构成的Socket。这是服务端的accept()方法便监听到客户端的连接请求,accept()方法就会返回于此客户端Socket连接的一个本机Socket对象,这样就实现了服务器端与客户端的连接。

2.2 绘制聊天界面

通过JFrame类绘制一个窗口界面,然后添加了两个JTextArea类的对象作为对话输入窗口和聊天记录输出从窗口,添加JButton类的实例按钮,用于发送消息、清除记录和选择文件。另外实例化JFileChooser类的两个文件及文件夹选择窗口。

2.3 聊天

聊天是通过客户端与服务器端的输入流与输出流实现的。就是将用户输入的文本或者发送的文件内容通过输出流发送给对方,而接收消息则是通过输入流接收的。

由于输入流的writeUTF(String)方法是阻塞的,并且键盘输入的操作也是阻塞的,所以仅仅在dos界面下,不能实现异步通信。为了解决异步通信的问题,本程序加入了图形界面,通过图形界面的消息就可以实现异步通信了。

文件发送功能基本思想,第一步,先告诉对方要发送文件了以及文件名将字符串”##**##send”+file.getName()写入输出流中,然后等待对方接收;第二步,如果收到对方同意接收文件即”##**##start”后,开始发送文件,当文件发送完成时,提示用户发送完成即将”##**##end”写入输出流;否则,如果收到”##**##nostart”,表示对方不想接收,则取消发送,用户可以选择再次发送。

文件接收方当收到以”##**##send”开头的消息时,便知道对方想要发送文件了,这是程序会弹出一个文件路径选择窗口,让用户选择要保存文件的路径,用户可以点取消,会将”##**##nostart”写入输出流,表示不想接收文件;也可以选择路径,点确定,会将”##**##start”写入输出流,表示接收文件,此时程序会建立一个文件输出流,指向刚才选择的路径文件,用于将对方发来的文件数据写入文件中。

2.4 类图

三、运行界面截图

聊天窗口截图

文件选择对话框截图

四、总结

4.1 优点

程序通过图形界面的方式,实现了聊天的异步通讯功能,可以适时地接收并显示对方发过来的数据。并且实现了文件传输的功能,可以发送单个文件,这将极大地方便用户的使用。

聊天程序是通过TCP进行传输,可靠性强,结合Java的图形界面编程,实现了聊天可以窗口化的目的,界面更加友好,使用户更方便使用。

程序结构清晰,层次分明,函数封装较好,代码的重用性更强。

4.2 不足

本程序只能实现一个客户端与服务端的通信,不能多用户同时连接服务器,也没有实现多用户之间同时聊天的功能。而且连接时必须先运行服务端,在运行客户端进行连接,而且只有在客户端知道服务端的ip地址以及端口号的时候才能连接聊天。有一定的局限性。

聊天记录只有清除,没有实现保存的功能,不能再次查询已经删除的聊天记录,没有数据的支持,不能实现用户的登陆和注册功能,想要推广此程序还有一定的差距。

此程序还有很多的不足之处,所以还有很大的改进空间。

4.3 收获

通过编写聊天程序,首先练习了基于TCP的socket编程,了解了Java网络编程的基础,并且学会了网路传输数据和接收数据,从而学会了编写简单的网络聊天程序。

同时,再次熟悉了文件输入输出流,以及对文件和文件夹的操作水平。同时,用更好的掌握了Java的图形界面的编程,并且熟悉了Java文件对话框,button按钮以及文本输入框等的使用。

上传的附件 cloud_download 基于JAVA实现的简单聊天工具.7z ( 61.31kb, 1次下载 )
error_outline 下载需要6点积分

发送私信

如果这世界上真有奇迹,那只是努力的另一个名字

10
文章数
7
评论数
最近文章
eject