基于Java多线程的聊天室程序
刘
玉
胡
晖仇宾
摘要:聊天室是网络上常见的一项服务。大多都采用B/S结构,本文用Java语言实现了一个C/
S结构的聊天室。该程序综合利用了多种Java知识与技术。
关键词:Java;多线程;聊天室;Socket
1
引言
网上各个网站提供的聊天室基本都是B/S结构的.现在用
Java实现一个C/S结构的聊天室程序。C/S结构包括两个方面:
一个运行在服务器;一个运行在客户端。
2工作原理
服务器程序运行后就等待客户端程序连入,客户端根据服
务器的IP地址和端口号连入。这样服务器和客户端就建立了
一个连接,而且可以有多个客户端同时连人一个服务器。连接
建立好之后,每个客户端的发言都发送给服务器.服务器接收
后再转发给所有连入的客户端,这样每个客户端就都能收到其
他客户发出的信息了。这就是C/S结构聊天室的工作原理.其
实现主要使用如下两种技术:
(1)Socket:网络套接字,让两个应用程序通过一个双向
的网络通信链接实现数据交换。即服务器和客户端的应用程序
各有一个Socket,这两个Socket把服务器和客户端的程序连接
起来并交换数据。
(2)多线程:因为一个服务器要连人多个客户端.要让服
务器程序同时为多个客户服务,就需要为每个客户端开辟一
个线程,专门负责处理该客户的信息。此外,客户端程序不
仅要发送信息给服务器,还要不断接收服务器转发过来的信
息,因此也需要开辟一个线程专门负责接收服务器的信息。
3程序实现
3.1
服务器端
建一个类,名称为ChartServer,代表服务器程序。在该类
中,首先定义一个ServerSocket,并指明端口号,这样服务器
端的Socket就建立好了。然后去接收客户端的请求。并且把客
户端传来的Socket放人一个HashSet中保存(HashSet集合中
保存所有客户的Socket,以便服务器),最后启动一个线程负
责该客户,在线程中不断接收该客户发送的信息并转发给
HashSet中所有的客户。代码如下:
渤'醅20髓10.蛹21与≤菇白
,,服务器端程序
public
class
ChartServer{
private
HashSet<Socket>clients=new
HashSet<
Socket>();//存放客户端Socket
public
ChartServerO{
try{
ServerSocket
SS=new
ServerSocket(6666);
,,建立Socket
while(true){
Socket
S=SS.accept();
,,等待并接收客户端请求
clients.add(s);
,/把收到的客户端Socket保存
new
ServerThread(s.clients).StartO;
,/启动一个线程接收该客户信息
}
)catch《IOException
e){
e.printStackTraceO;
}
)
,,线程,负责接收客户信息并转发给其他客户
class
ServerThread
extends
Thread{
private
Socket
s:
private
HashSet
clients;
public
ServerThread(Socket
s,HashSet
clients){
this.S=s:
thiS.clients=clients;
}
public
void
run(){
try{
BufferedReader
br=new
Buffere-
dReader(new
InputStreamReader(s.getlnputStreamO));
while(true){
sendMessage(br.readLineO+“、n”):
}
}catch《IOException
e}{
e.printStackTraceO;
}
}
,/给每个客户发送一份信息
private
void
sendMessage(String
str}{
一
~~
一
一
一
~
~
一
~~
一
~集
一密
一慧
一智
.....一....一
第一
用一
实~
一一一
~
一一
~~
一一
~~~
万方数据