java实现聊天室功能(包含全部代码,有界⾯)服务器端代码:
import java.*;
import java.io.*;
import java.util.*;
import urrent.*;
import javax.swing.*;
public class Server
{
private static final int PORT=6666;
G_Menu gm=new G_Menu();
private ServerSocket rver;
public ArrayList<PrintWriter> list;
public static String ur;
public static ArrayList<Ur> list1=new ArrayList<Ur>();//定义⽤户集合
public Ur uu;
public Server(String ur)
{
this.ur=ur;
}
public void getServer()
{
list =new ArrayList<PrintWriter>();
try{
rver=new ServerSocket(PORT);
System.out.println("服务器启动,开始监听......");
while(true)
{
Socket client=rver.accept();//接收客户端线程
PrintWriter writer = new OutputStream());
list.add(writer);
Thread t = new Thread(new Chat(client));
t.start();
}
}catch(Exception ex){
玻璃企业
ex.printStackTrace();
}
}
public static void main(String[] args)
{
new Server(ur).getServer();
}
class Chat implements Runnable
{
Socket socket;
private BufferedReader br;
private String msg;
private String mssg="";
public Chat(Socket socket)
{
try{
this.socket=socket;
}catch(Exception ex){
ex.printStackTrace();
}
}
public void run()
钦佩英语
{
try{
br=new BufferedReader(new InputStream())); while((adLine())!=null)
{
if(msg.equals("1008611"))//匹配字符串显⽰好友列表
{
adLine();
String[] st=msg.split(":");//将⽤户信息跟消息分隔开
uu=new Ur(st[0],st[1],socket);//将⽤户信息添加到Ur对象中
list1.add(uu);//将对象添加到⽤户集合
Iterator<Ur> it=Server.list1.iterator();//遍历⽤户集合
while(it.hasNext())
{
Ur ();
Name()+"("+u.getSex()+"):";
mssg+=msg;//将所有的⽤户信息连接成⼀个字符串
}
ndMessage("1008611");//显⽰好友列表匹配标识
ndMessage(mssg);//群发消息
}
el if(msg.equals("10010"))//显⽰说话消息
{
adLine();
System.out.println(msg);
ndMessage("10010");//显⽰说话信息匹配标识
ndMessage(msg);
}
el if(msg.equals("10086"))//显⽰进⼊聊天室
{
adLine();
System.out.println(msg);
ndMessage("10086");//进⼊聊天室匹配标识
ndMessage(msg);
}
el if(msg.equals("841163574"))//私聊
{
adLine();
String[] rt=msg.split("1072416535");//把传进来的⽤户信息跟说话内容分开
System.out.println(rt[1]);//在服务器端显⽰说话内容
臂的组词String[] tg=rt[0].split(":");//因为是私聊,传过来两个⽤户的⽤户信息,这句作⽤是再把两个⽤户信息分开Iterator<Ur> iu=Server.list1.iterator();//遍历⽤户集合
while(iu.hasNext())
{
Ur =iu.next();
if(tg[1].equals(.getName()+"("+.getSex()+")"))//如果传进来的⽤户信息跟集合中的⽤户信息吻合{
try{
PrintWriter pwriter=new PrintWriter(.getSock().getOutputStream());//建⽴⽤户⾃⼰的流pwriter.println("841163574");//匹配标识
pwriter.println(rt[1]);//向单独⽤户发送消息
pwriter.flush();
System.out.println(rt[1]);
}catch(Exception ex){
ex.printStackTrace();
}
}
el if(tg[0].equals(.getName()))//如果传进来的⽤户信息跟集合中的⽤户信息吻合
{
try{
PrintWriter pwr=new PrintWriter(.getSock().getOutputStream());//建⽴⽤户⾃⼰的流
pwr.println("841163574");//匹配标识
pwr.println(rt[1]);//向单独⽤户发送消息
pwr.flush();
System.out.println(rt[1]);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
el if(msg.equals("456987"))//下线
{
adLine();
System.out.println(msg);//在服务端显⽰信息9月13日
ndMessage("456987");//匹配字符串
ndMessage(msg);//匹配完毕后群发消息
String[] si=msg.split(":");//将传过来的⽤户名跟信息分隔开
Iterator<Ur> at=Server.list1.iterator();//遍历⽤户集合
电液伺服阀while(at.hasNext())
{
就寝
Ur ();
Name().equals(si[0]))//如果传过来的⽤户名跟⽤户集合⾥的⽤户吻合{
}
}
break;
}
el if(msg.equals("123654"))//刷新
{
String mssge="";
Iterator<Ur> iter=Server.list1.iterator();//遍历⽤户集合
while(iter.hasNext())
{
Ur ();
Name()+"("+Sex()+"):";
mssge+=msg;//将所有的⽤户信息连接成⼀个字符串
}
ndMessage("123654");//发送刷新匹配标识
ndMessage(mssge);//群发消息
}
}
}catch(IOException ex){
ex.printStackTrace();
}
英语角话题}
}
宗法制的作用public void ndMessage(String message)//群发消息⽅法
{
try{
for(PrintWriter pw:list)//输出流集合