packagecom.darkblue;
/**
*
*@authorDarkBlue
*
*本程序用于实现聊天室的服务器端
*/
importjava.net.*;
importjava.io.*;
publicclassChatServerimplementsRunnable{
privateServerSocketserver;//服务器socket
privatestaticintport= 8888;//监听端口号
privatestaticbooleanisShutDown=false;//没有停止
privateChatServer() {
try{
server=newServerSocket(port);//创建一个服务器socket
}catch(IOException e) {
e.printStackTrace();
}
}
publicstaticvoidstartService() {
ChatServer cs =newChatServer();
Thread th =newThread(cs);
th.start();
}
publicvoidrun(){
try{
//循环等待客户端连接
while(!isShutDown){
Socket socket =server.accept();
//使用socket进行通信
newSocketManager(socket).start();//开始一个线程
}
}catch(IOException e) {
e.printStackTrace();
}
}
publicstaticvoidstopService() {
isShutDown=true;
}
publicstaticvoidmain(String[] args){
ChatServer.startService();
}
}
SocketManager.java 用于管理socket
packagecom.darkblue;
importjava.net.*;
importjava.io.*;
importjava.util.*;
publicclassSocketManagerextendsThread {
privatestaticListsocketList=newArrayList();//存放socket
privatestaticQueuemessages=newLinkedList();//消息队列
privateSocketsocket=null;//对象变量
publicSocketManager() {
super();
}
publicSocketManager(Socket socket) {
this.socket= socket;
addSocket(socket);
}
publicstaticvoidaddSocket(Socket socket) {//增加一个socket
socketList.add(socket);
}
publicstaticvoidaddMessage(String message) {
messages.add(message);
}
publicstaticvoidsendAllMessage() {
if(messages!=null) {
while(!messages.isEmpty()) {
Object msg =messages.remove();
if(msginstanceofString) {
String message = (String) msg;
if(socketList!=null) {//循环发送
for(inti = 0; i
Socket socket = (Socket)socketList.get(i);
try{
OutputStreamWriter osw =newOutputStreamWriter(
socket.getOutputStream());
BufferedWriter bw =newBufferedWriter(osw);
bw.write(message +"nr");
bw.flush();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
publicvoidrun() {//针对每个socket进行
if(socket!=null) {// socket不为null
try{
BufferedReader br =newBufferedReader(newInputStreamReader(
socket.getInputStream()));//输入流
BufferedWriter bw =newBufferedWriter(newOutputStreamWriter(socket.getOutputStream()));
bw.write("欢迎使用本聊天系统nr");
bw.write("输入消息后按回车发送消息nr");
bw.write("消息:");
bw.flush();
String temp = br.readLine();//读取消息
while(temp!=null){
addMessage(temp);
sendAllMessage();
bw.write("消息:");
bw.flush();
temp=br.readLine();
}
br.close();
bw.close();
socket.close();
socketList.remove(socket);//移除
System.out.println("关闭了一个");
}catch(IOException e) {
e.printStackTrace();
}
}
}
}