📄 server.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import java.io.*;
public class Server extends JFrame
{
String str,ip,mark1,anothername,words,updata,waring;
JPanel pane;
List list;
String[] name=new String[30];
String[] ipp=new String[30];
Container con=this.getContentPane();
DatagramSocket ds1,ds2,ds3,ds4,ds5,ds6;
public Server()
{
super("Server1.0");
setSize(640,480);
for(int j=0;j<30;j++)
{
name[j]=null;
ipp[j]=null;
}
pane=new JPanel();
list=new List(1);
list.setFont(new Font("黑体", Font.BOLD, 15));
JScrollPane scr1 = new JScrollPane(list);
scr1.setPreferredSize(new Dimension(620,440));
pane.add(scr1);
con.add(pane);
setLocation(200,150);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
///////////////////////////////////////////////////////
try
{
ds2=new DatagramSocket(8000);//接收信息
ds1=new DatagramSocket();
ds4=new DatagramSocket(8500);//接收信息注册
ds3=new DatagramSocket();
ds6=new DatagramSocket(9500);//接收信息更新
ds5=new DatagramSocket();
}
catch(Exception e)
{
System.out.println(e);
}
new Thread(new Runnable()
{
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp2=new DatagramPacket(buf,1024);
DatagramPacket dp1;
while(true)
{
synchronized("a")
{
try
{
////////////////////////////////////////////////////////////接收信息
ds2.receive(dp2);
str=new String(buf,0,dp2.getLength());
int k=str.indexOf(' ');
anothername=str.substring(0,k);
words=str.substring(k);
ip=comparename(anothername);
anothername=compareip(dp2.getAddress().getHostAddress());
str=anothername+"对"+str.substring(0,k)+"说:"+words;
list.add(str+" from:"+dp2.getAddress().getHostAddress()+"to:"+ip,0);
////////////////////////////////////////////////////////////接收完毕
////////////////////////////////////////////////////////////发送信息
dp1=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName(ip),8001);
ds1.send(dp1);
////////////////////////////////////////////////////////////发送完毕
}
catch(Exception e2)
{
System.out.println(e2);
}
}
}
}
}).start();
///////////////////////////////////////////////////////////注册线程
new Thread(new Runnable()
{
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp4=new DatagramPacket(buf,1024);
DatagramPacket dp3;
while(true)
{
synchronized("b")
{
try
{
////////////////////////////////////////////////////////////接收信息注册
ds4.receive(dp4);
str=new String(buf,0,dp4.getLength());
ip=dp4.getAddress().getHostAddress();
list.add(str+":from"+ip,0);
////////////////////////////////////////////////////////////接收完毕注册
////////////////////////////////////////////////////////////发送信息注册
mark1=compare(str,ip);
dp3=new DatagramPacket(mark1.getBytes(),mark1.getBytes().length,InetAddress.getByName(ip),8501);
ds3.send(dp3);
////////////////////////////////////////////////////////////发送完毕 注册
}
catch(Exception e4)
{
System.out.println(e4);
}
}
}
}
}).start();
///////////////////////////////////////////////////////////更新线程
new Thread(new Runnable()
{
public void run()
{
byte buf[]=new byte[1024];
DatagramPacket dp6=new DatagramPacket(buf,1024);
DatagramPacket dp5;
while(true)
{
synchronized("c")
{
try
{
////////////////////////////////////////////////////////////接收信息更新
ds6.receive(dp6);
str=new String(buf,0,dp6.getLength());
if(str.equals("OK"))
{
updata=updatasend();
waring=compareip(dp6.getAddress().getHostAddress())+"上线了!";
list.add("列表更新"+str,0);
System.out.println("列表更新"+str);
}
else if(str.equals("EXIT"))
{
datamodify(dp6.getAddress().getHostAddress());
list.add("列表更新"+str,0);
System.out.println("列表更新"+str);
waring=compareip(dp6.getAddress().getHostAddress())+"悄悄地走了!";
updata=updatasend();
}
else
{
waring=compareip(dp6.getAddress().getHostAddress())+"非法操作!";
}
////////////////////////////////////////////////////////////接收完毕更新
////////////////////////////////////////////////////////////发送信息更新
dp5=new DatagramPacket(waring.getBytes(),waring.getBytes().length,InetAddress.getByName("127.0.0.1"),8001);
ds5.send(dp5);
dp5=new DatagramPacket(updata.getBytes(),updata.getBytes().length,InetAddress.getByName("127.0.0.1"),9501);
ds5.send(dp5);
////////////////////////////////////////////////////////////发送完毕更新
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
}).start();
}
////////////////////////////////////////////////////////////
public static void main(String[] args)
{
new Server();
}
public String compare(String str,String ip)
{
String bool="";
for (int i=0;i<30;i++)
{
if (name[i]==null)
{
name[i]=str;
ipp[i]=ip;
list.add(name[i]+"已经连接",0);
bool="true";
break;
}
else if(name[i].equals(str))
{
list.add(str+"连接失败",0);
bool="false";
break;
}
else
{
bool="false";
}
}
return bool;
}
public String comparename(String anothername)
{
String ipall="";
for (int i=0;i<30;i++)
{
if(name[i].equals(anothername))
{
ipall=ipp[i];
break;
}
else if(anothername.equals("所有人"))
{
ipall="127.0.0.1";
break;
}
}
return ipall;
}
public String compareip(String ippp)
{
String nameall="";
for (int i3=0;i3<30;i3++)
{
if(ipp[i3].equals(ippp))
{
nameall=name[i3];
break;
}
else
{
nameall="所有人";
}
}
return nameall;
}
public String updatasend()
{
String data="所有人 ";
for (int i=0;i<30;i++)
{
if(name[i]==null)
{
list.add(name[i]);
break;
}
data=data+name[i]+" ";
}
return data;
}
public void datamodify(String ip)
{
for (int i=0;i<30;)
{
if(ipp[i].equals(ip))
{
for(;i<29;)
{
ipp[i]=ipp[i+1];
name[i]=name[i+1];
i++;
}
ipp[i]=null;
name[i]=null;
}
i++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -