public class MyServer {
List list=new ArrayList();
public static void main(String[] args) {
try {
//定义服务端
//获取一个连接
new MyServer(). start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void start() throws IOException{
ServerSocket server=new ServerSocket(8888);
while(true){
Socket accept = server.accept();
MyChannel myChannel = new MyChannel(accept) ;
list.add(myChannel);
new Thread(myChannel).start();
}
}
class MyChannel implements Runnable{
private DataInputStream dis=null;
private DataOutputStream dos=null;
private boolean flag=true;
private String name=null;
private boolean sys=true;
public MyChannel(Socket server) {
try {
dis=new DataInputStream(server.getInputStream());
dos=new DataOutputStream(server.getOutputStream());
this.name=dis.readUTF();
this.send("欢迎进入聊天室");
sendOthers(this.name+"进入了聊天室",true);
} catch (IOException e) {
e.printStackTrace();
try {
dis.close();
dos.close();
this.flag=false;
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public String recive() throws IOException{
String readUTF = dis.readUTF();
return readUTF;
}
public void send(String msg) throws IOException{
dos.writeUTF(msg);
dos.flush();
}
public void sendOthers(String msg,boolean sys) throws IOException{
if(msg.startsWith("@")&&msg.contains(":")){
String name1 = msg.substring(msg.indexOf("@")+1,msg.indexOf(":"));
String content =msg.substring(msg.indexOf(":")+1);
for(MyChannel m: list){
if(m.name.equals(name1)){
m.send(this.name+"对您悄悄地说"+content);
return;
}
}
}
for(MyChannel m: list){
if(m==this){
continue;
}
if(sys){
m.send("系统消息:"+msg);
}
else{
m.send(this.name+"对所有人说:"+msg);
}
}
}
@Override
public void run() {
while(flag){
try {
sendOthers(recive(),false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
dos.close();
dis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
}