📄 kbrss.java
字号:
/* 2004年毕业设计
聊天室服务器程序 kbrss.java
设计人:王楠
*/
//加载必要的类
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.Button;
import java.awt.event.*;
import java.awt.TextField;
//主类
public class kbrss{
static Vector sname=new Vector(10,10); //类变量,用于存放用户ip地址
static Vector llname=new Vector(10,10); //类变量,用于存放用户名集和
static jform3 form3=new jform3(); //类变量,创建form3
static boolean biao1=true; //运行间隔标识
static int renmax,ren=0; //最多人数,当前人数
static String ltsname; //聊天室名称
static String mjian="~'`"; //自定义间隔符
public static void main(String kerberos[])
{
form3.addWindowListener(new winlis());
form3.load(); //运行form3
form3.button2.addActionListener(new aclis());
form3.button1.addActionListener(new aclis());
form3.list1.addItemListener(new aclis());
while(biao1){}
System.out.println("ok");
try{
ServerSocket ss=new ServerSocket(1129); //创建ServerSocket
while(true)
{
Socket s=ss.accept(); //等待连接
xian p=new xian(s); //创建xian类对象
Thread fenlei=new Thread(p); //创建线程
fenlei.start(); //线程开始运行
}
}catch(IOException e){}
}
static class winlis extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
form3.dispose();
System.exit(0);
}
}
//事件响应(内部类)
static class aclis implements ActionListener,ItemListener
{
public void actionPerformed(ActionEvent e)
{
String dx=e.getActionCommand();
//begin 创建聊天室
if(dx.equals("创建"))
{
try{
kbrss.ltsname=form3.text3.getText();
if(!kbrss.ltsname.equals(""))
{
kbrss.renmax=Integer.parseInt(form3.text4.getText());
kbrss.biao1=false;
kbrss.form3.label3.setVisible(true);
kbrss.form3.button2.setVisible(false);
kbrss.form3.text3.setEditable(false);
kbrss.form3.text4.setEditable(false);
kbrss.form3.text6.setText("0");
}
}catch(Exception e1){}
}
//end 创建聊天室
//begin 踢出聊天用户
if(dx.equals("踢"))
{
try{
String strll=form3.list1.getSelectedItem();
int index=kbrss.llname.indexOf(strll);
form3.list1.remove(strll);
kbrss.sname.removeElementAt(index);
kbrss.llname.removeElement(strll);
InetAddress myip=InetAddress.getLocalHost();
xian.guang("@/"+myip.getHostAddress()+"@"+"---"+strll+"---");
kbrss.form3.text6.setText(""+kbrss.llname.size());
kbrss.ren=kbrss.llname.size();
}catch(Exception excpt){}
}
//end 踢出聊天用户
if(dx.equals("结束"))
{
}
}
//list1列选项改变事件
public void itemStateChanged(ItemEvent e)
{
String strll=form3.list1.getSelectedItem();
int index=kbrss.llname.indexOf(strll);
Object o=kbrss.sname.elementAt(index);
kbrss.form3.text5.setText(o.toString());
}//end itemStateChanged
}//end acls
}//end kbrss
//聊天信息线程接口
class xian implements Runnable{
Socket sa;
public xian(Socket sing)
{
sa=sing;
}
public void run()
{
try{
PrintStream out=new PrintStream(sa.getOutputStream());
BufferedReader in
=new BufferedReader(new InputStreamReader(sa.getInputStream()));
String lsname;
String ssin=in.readLine(); //接收客户机申请
//聊天请求处理
if(ssin.equals("liao"))
{
out.println("yes"); //返回服务器标识信息
lsname=in.readLine(); //添加客户机昵称
if(kbrss.llname.size()>=kbrss.renmax)
{
out.println("max"); //返回人满信息
return;
}
if(!kbrss.llname.contains(lsname)) //查看申请用户名是否重名
{
out.println("ok"); //接受请求
out.println("("+kbrss.ltsname+")");//发送聊天室名称
int sul=kbrss.llname.size(); //本地用户个数
ssin=Integer.toString(sul);
out.println(ssin); //将本要用个数发送客户端
//逐个发送用户名
if(sul>0)
for(int i1=0;i1<sul;i1++)
out.println(kbrss.llname.elementAt(i1));
kbrss.sname.add(sa.getInetAddress());//将申请用户ip加入本地
kbrss.llname.add(lsname); //将申请用户名加入本地
kbrss.form3.list1.add(lsname); //在form3的list1上显示新加入用户名
kbrss.form3.text6.setText(""+kbrss.llname.size());
kbrss.ren=kbrss.llname.size();
String mess="@"+sa.getLocalAddress()+"@"+"+++"+lsname+"+++";
guang(mess); //将新加用户在局域网上广播
}
else
{
out.println("more"); //重名
}
}//end if
//用户退出处理
else if((ssin.substring(0,3)).equals("---"))
{
int df=ssin.indexOf("---",3); //
String sn=ssin.substring(3,df); //取出用户名
int index=kbrss.llname.indexOf(sn); //{删除向量表和list1中的此用户
kbrss.llname.removeElement(sn);
kbrss.sname.removeElementAt(index);
kbrss.form3.list1.remove(sn);
kbrss.form3.text6.setText(""+kbrss.llname.size());//}
kbrss.ren=kbrss.llname.size();
ssin="@"+sa.getLocalAddress()+"@"+ssin;
guang(ssin); //在局域网中发送广播
}//end else if
//用户聊天信息处理
else if(ssin.equals("mess"))
{
int len=Integer.parseInt(in.readLine());
ssin="@"+sa.getLocalAddress()+"@"; //在信息前加本机地址后广播
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -