📄 server.java
字号:
//super.ie 2.0聊天软件
//实现了基本通信
//按照协议完成,部分功能在以后的更新中实现
package myprojects.client;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;
class Server extends JFrame implements ActionListener{
ServerSocket ssock;
JButton start=new JButton("start");
JButton stop=new JButton("stop");
JLabel num=new JLabel(" ");
Hashtable clients=new Hashtable();
Accept accept;
public Server() {
this.getContentPane().setLayout(new FlowLayout());
this.getContentPane().add(start);
this.getContentPane().add(stop);
this.getContentPane().add(num);
stop.setEnabled(false);
start.addActionListener(this);
stop.addActionListener(this);
setSize(300, 80);
setTitle("Server");
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{ try{
sengMsgToAll("serverquit");
}catch(Exception ee){}
dispose();
System.exit(0);
}
});
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==start)
{ try{
ssock=new ServerSocket(5555);//端口地址
stop.setEnabled(true);
start.setEnabled(false);
accept=new Accept(this);
}catch(Exception ee){}
}
else
{
accept.flag=false;
Enumeration en=clients.elements();
while(en.hasMoreElements())
{
ServerForClient sfClient=(ServerForClient)en.nextElement();
sfClient.flag=false;
}
stop.setEnabled(false);
start.setEnabled(true);
try{
ssock.close();
}catch(Exception ee){}
}
}
public void sengMsgToAll(String msg)
{
Enumeration en=clients.elements();
while(en.hasMoreElements())
{
ServerForClient sfClient=(ServerForClient)en.nextElement();
try{
sfClient.out.writeUTF(msg);
}catch(Exception ee){}
}
}
public void sengMsgToOne(String msg,String name)
{
Enumeration en=clients.elements();
while(en.hasMoreElements())
{
ServerForClient sfClient=(ServerForClient)en.nextElement();
if(sfClient.getClientName().equals(name))
{ try{
sfClient.out.writeUTF(msg);
}catch(Exception ee){}
break;
}
}
}
public void refresh()
{
Enumeration en=clients.keys();
sengMsgToAll("refresh");
while(en.hasMoreElements())
{
sengMsgToAll("name");
sengMsgToAll((String)en.nextElement());
}
}
public static void main(String args[]) {
Server mainFrame = new Server();
}
}
class Accept extends Thread
{ boolean flag=true;
Server server;
Socket sock;
Accept(Server server)
{
this.server=server;
this.start();
}
public void run()
{ while(flag)
{ try{
sock=server.ssock.accept();
ServerForClient sfclient=new ServerForClient(server,sock);
String name=sfclient.getClientName();
boolean f=false;
Enumeration en=server.clients.keys();
while(en.hasMoreElements())
{
if(((String)en.nextElement()).equals(name))
{f=true;break;}
}
if(f==true)//验证
{ sfclient.out.writeUTF("equals");
sock.close();
}
else
{server.clients.put(name,sfclient);
server.sengMsgToAll("msg");
server.sengMsgToAll(name+"进入聊天室");
server.refresh();
sfclient.start();
}
}catch(Exception ee){}
}
}
}
class ServerForClient extends Thread
{ DataInputStream in;
DataOutputStream out;
Socket sock;
Server server;
private String name;
boolean flag=true;
ServerForClient(Server server,Socket sock)
{
this.server=server;
this.sock=sock;
try{
in=new DataInputStream(sock.getInputStream());
out=new DataOutputStream(sock.getOutputStream());
name=in.readUTF();
}catch(Exception e){}
}
public String getClientName()
{return name;}
public void pwd() //密码
{
}
public void time() //系统时间
{}
public void fun() //设置功能位
{}
public void Jie()//结束位
{}
public void Xuhao() //序号
{}
public void con() //连接功能
{}
public void pic() //图元
{}
public void intu() //插入图元
{}
public void run()
{ String type=null;
String msg=null;
String target=null;
while(flag)
{ try{
type=in.readUTF();
if(type.equals("public"))//群聊
{
msg=in.readUTF();
server.sengMsgToAll("msg");
server.sengMsgToAll(name+"对大家说:"+msg);
}
else if(type.equals("private"))
{
msg=in.readUTF();
target=in.readUTF();
server.sengMsgToOne("msg",target);
server.sengMsgToOne(name+"对"+target+"说:"+msg,target);
}
else if(type.equals("privateAll"))//私聊
{
msg=in.readUTF();
target=in.readUTF();
server.sengMsgToAll("msg");
server.sengMsgToAll(name+"对"+target+"说:"+msg);
}
else if(type.equals("say"))
{
msg=in.readUTF();
target=in.readUTF();
server.sengMsgToAll("msg");
server.sengMsgToAll(name+"对"+target+"说:"+msg);
}
else if(type.equals("quit"))//退出
{
server.clients.remove(name);
server.sengMsgToAll("msg");
server.sengMsgToAll(name+"已离开聊天系统");
flag=false;
server.refresh();
}
}catch(Exception ee){break;}
}
try{
sock.close();
}catch(Exception ee){}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -