聊天室(chat)是人们现在在Internet上的重要的交流场所,随着Internet技术的不断发展,也出现很多不同种类的聊天室,用于方便人们的交流.甚至现在有了用于聊天的软件和专门的聊天服务器可见聊天室的作用之大.
既然聊天室这么实用使用人群这么广,那么我也尝试着用Java语言编写了一个简单的聊天室—晒晒聊天室。
晒晒聊天室的基本功能包括—用户登陆聊天室,客户端提示上线和下线信息,用户聊天的内容其他用户也可以共享看到.
聊天室其实主要由2个部分组成,一是服务器端(Server)和一个客户端(Client),通过Socket套结字来创建服务器和客户端的连接,一般Socket类来初始化服务器名和端口号.我们有了连接后,就必须使用Java提供的2个对象(PrintStream,BufferedReader)来读入和写出Socket,这是使用Socket类提供的2个方法(getInputStream(),getOutputStream())来使的以上的2个对象分别从Socket中读数据和往Socket中写数据,使得用户发送的数据可以通过Socket来传输.如果我们想保存聊天记录则可以使用ObjectOutputStream对象的writeObject() 方法来把内容写入文件,以便保存。
下面是晒晒聊天室的基本功能:
1:用户登陆:(用户填写一个呢称和选择自己的性别,单击确定便可以登陆进聊天室主界面,下图为用户登陆的JFrame窗体)

里面包括了一些的基本验证功能,当用户把昵称和性别写好之后就通过(DataInputStream,DataOutputStream)这2个对象把昵称和性别写入Socket.并初始化为新用户.
2:聊天面板:(新用户进入提示,用户下线提示,发表信息的共享,下面为聊天室的主界面,下图为聊天主JFrame窗体)

这是gaga用户登陆后窗体的样式,在本窗体中实现主要是通过一个Vector来保存用户的昵称和性别,并将其绑定给JList这个控件。当用户退出的时候我就将该面板的相应的在面板上显示该用户下线的提示信息,并且把Vector同步动态数组中的该用户Remove掉.下面的图为gaga用户下线的状态.

3:开启服务器端(系统关键的组成部分,用于接收和转发来自客户端的内容,下面的图为服务器启动的时候的状态)

服务器端不需要做成客户端那样的JFrame面板,用一个Main函数直接加载,通过服务器类的构造函数来创建端口,并创建线程,使得使用相同端口的客户端可以连接到服务器,在通过start()方法来启动服务器,使服务器开始为客户端服务.这是我们在线程的run()方法中为每一个用户创建自己的线程,因为我们的服务器是多线程的,服务于全体用户的.在每个用户的单一线程中我们设计个死循环让服务器不断的为此用户服务,既然是死循环,我们就必须显式的释放其套接字,因为每个线程都占有一定的内存,要不在finally中释放的话,用户多起来的时候很有可能把服务器拖垮.
4:关闭服务器(服务器关闭后,客户端将不会正常运行,所以我们也提示客户端,使用户知道服务器正在维护.下面的图为服务器停机时候的图)

当服务器停机的时候我们就显示相应的提示信息—已经与服务器端开,调用Vector同步动态数组的removeAllElements()方法清空当前的Vector,使得JList控件清空.
结尾:
晒晒我的Java聊天室的基本功能,主要使用了Java的Socket编程来编写一个简单聊天室。
下面为使用的主要类和方法:
|
名称 |
使用类 |
使用方法 |
|
晒晒我的Java聊天室,所用的类和方法 |
Serversocket |
accept() |
|
Thread |
Start()方法,run() |
|
Socket |
getInputStream(),getOutputStream() |
|
BufferedReader |
readline() |
|
Vector |
addElement(),removeElement(),removeAllElement() |
|
ObjectInput/output-Stream |
readObject(),writeObject() |
以上便是晒晒我的Java聊天室。
姓名:顾挺
软件学院:软开0533班
长沙民政职业技术学院