java聊天室实现的离线功能_在线聊天室的Java实现(功能比较弱)

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();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值