java聊天室一(服务器)

package com.gu.socket.pro4;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class mulServer {
    List<myChannal> list=new ArrayList<myChannal>();
    
    public static void main(String[] args) throws IOException {
        new mulServer().connection();
        
    }
    
    public void connection() throws IOException{
        ServerSocket server=new ServerSocket(9999);
        while(true){
            Socket soc=server.accept();
            myChannal channal=new myChannal(soc);
            list.add(channal);
            Thread t1=new Thread(channal);
            t1.start();
        }
    }
    /**
     * 每一个客户端一个管道
     * 输入流,输出流
     * @author 谷
     *成员内部类
     */
    private class myChannal implements Runnable{
        private DataInputStream in;
        private DataOutputStream da;
        private boolean isRunning=true;
        
        public myChannal(Socket soc) {
            try {
                in=new DataInputStream(soc.getInputStream());
                da=new DataOutputStream(soc.getOutputStream());
            } catch (IOException e) {
                isRunning=false;
                closeUtil.closeAll(in,da);
                list.remove(this);
            }
            
        }
        private String receive(){
            String mes=null;
            try {
                mes=in.readUTF();
            } catch (IOException e) {
                isRunning=false;
                closeUtil.closeAll(in,da);
                list.remove(this);
            }
            return mes;
        }
        
        
        private void send(String message){
            if(message==null||message.equals(""))
                return ;
            
            try {
                da.writeUTF(message);
                da.flush();
            } catch (IOException e) {
                isRunning=false;
                closeUtil.closeAll(in,da);
                list.remove(this);
            }
            
        }
        //群发给其他人
        private void sendOthers(){
            String mes=this.receive();
            for(int i=0;i<list.size();i++){
                if(list.get(i)==this){
                    continue;
                }
                list.get(i).send(mes);
            }
        }
        @Override
        public void run() {
            while(isRunning){
                sendOthers();
            }
        }
        
    }
}

 

posted @ 2016-10-18 13:46  mmmmgxt  阅读(212)  评论(0编辑  收藏  举报