易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Java简易聊天室
支持多人向服务器端发送消息并由服务器发送至各个客户端服务器端代码:
[java]
/*
* @topic:服务器端
*/
import
java.io.*;
import
java.net.*;
import
java.util.List;
import
java.util.ArrayList;
import
java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
public
class
Server{
//服务器端口
private
static
final
int
SERVERPORT =
8889
;
//客户端连接
private
static
List<Socket> mClientList =
new
ArrayList<Socket>();
//线程池
private
ExecutorService mExecutorService;
//ServerSocket对象
private
ServerSocket mServerSocket;
public
static
void
main(String[] args){
//System.out.println("Hello Landor!");
new
Server();
}
public
Server(){
try
{
//设置服务器端口
mServerSocket =
new
ServerSocket(SERVERPORT);
//创建一个线程池
mExecutorService = Executors.newCachedThreadPool();
System.out.println(
"wait client :"
);
//用来临时保存客户端连接的Socket对象
Socket client =
null
;
while
(
true
){
//接收客户连接并添加到List中
client = mServerSocket.accept();
mClientList.add(client);
//开启一个客户端线程
mExecutorService.execute(
new
ThreadServer(client));
}
}
catch
(IOException e){
e.printStackTrace();
}
}
//每个客户端单独开启一个线程
static
class
ThreadServer
implements
Runnable{
private
Socket mSocket;
private
BufferedReader mBufferedReader;
private
PrintWriter mPrintWriter;
private
String mStrMSG;
public
ThreadServer(Socket socket)
throws
IOException{
this
.mSocket = socket;
mBufferedReader =
new
BufferedReader(
new
InputStreamReader(
socket.getInputStream()));
mStrMSG =
"user: "
+
this
.mSocket.getInetAddress()+
" come total:"
+ mClientList.size();
sendMessage();
}
public
void
run(){
try
{
while
((mStrMSG = mBufferedReader.readLine())!=
null
){
if
(mStrMSG.trim().equals(
"exit"
)){
//当一个客户端退出时
mClientList.remove(mSocket);
mBufferedReader.close();
mPrintWriter.close();
mStrMSG =
"user:"
+
this
.mSocket.getInetAddress()
+
" exit total:"
+ mClientList.size();
mSocket.close();
sendMessage();
break
;
}
else
{
mStrMSG = mSocket.getInetAddress() +
":"
+ mStrMSG;
sendMessage();
}
}
}
catch
(IOException e){
e.printStackTrace();
}
}
//发送消息给所有客户端
private
void
sendMessage()
throws
IOException {
System.out.println(mStrMSG);
for
(Socket client : mClientList){
mPrintWriter =
new
PrintWriter(client.getOutputStream(),
true
);
mPrintWriter.println(mStrMSG);
}
}
}
}
客户端:
[java]
import
java.io.BufferedReader;
import
java.io.InputStreamReader;
import
java.io.PrintWriter;
import
java.net.Socket;
import
java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
/*
* @topic:客户端
*/
public
class
Client{
private
static
final
int
PORT =
8889
;
private
static
ExecutorService exec = Executors.newCachedThreadPool();
public
static
void
main(String[] args)
throws
Exception{
//System.out.println("Hello Landor!");
new
Client();
}
public
Client(){
try
{
Socket socket =
new
Socket(
"localhost"
,PORT);
exec.execute(
new
Sender(socket));
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream()));
String msg;
while
((msg = br.readLine())!=
null
){
System.out.println(msg);
}
}
catch
(Exception e){
e.printStackTrace();
}
}
//客户端线程获取控制台输入消息
static
class
Sender
implements
Runnable{
private
Socket socket;
public
Sender(Socket socket){
this
.socket = socket;
}
public
void
run(){
try
{
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(System.in));
PrintWriter pw =
new
PrintWriter(socket.getOutputStream(),
true
);
while
(
true
){
String msg = br.readLine();
pw.println(msg);
if
(msg.trim().equals(
"exit"
)) {
pw.close();
br.close();
exec.shutdownNow();
break
;
}
}
}
catch
(Exception e){
e.printStackTrace();
}
}
}
}
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图