package juyuwangip;
import java.io.*;
import java.net.*;
import java.util.*;
public class JuyuwangIP{
    public static void main(String args[]){
        new starts().starts();
        }
    }
class message extends Thread{//消息转发其他客户端机制
    ArrayList<Socket> socket03 = new ArrayList<Socket>();
    int i=0;
    String ms;
    message(String c1,ArrayList<Socket> h,int i){//传入值为“要转发的消息”“socket”“socket个数”
        socket03=h;    } 
    public void run(){   //转发具体执行   
        Socket mysocket = null;
        DataOutputStream out = null;
        for(int j=0;j<=i;j++)//循环得到socket转发
        {
            
            mysocket = socket03.get(j);
            
            
            InetAddress ip = mysocket.getInetAddress();
            String my = ip.toString();
            String[] st = my.split("/");
            my= st[1];//得到要转发至客户端的ip地址
            int port = mysocket.getPort();//得到端口号
            
            
        try{                                               //下面就是连接客户端发数据包了,总是连接失败
           // mysocket.connect();
           // mysocket = new Socket(ip,port);
            System.out.println("客户的地址:2222");
            out = new DataOutputStream(mysocket.getOutputStream());          
            out.writeUTF(ms);
                                  
        }catch(IOException e){
            System.out.println("客户的地址:54");
            //return;
        }
        }
    }
}class ServerThread extends Thread{//监听客户端消息
    ArrayList<Socket> socket02 = new ArrayList<Socket>();
    static int i=0;
    Socket socket;
    DataOutputStream out = null;
    DataInputStream in = null;
    String s = null;
    ServerThread(Socket t){
        socket = t;
        
        if(i==0){
            socket02.add(socket);
            i++;
        }
        else{
        for(int j = 0;j<i;j++){//将新的socket存入数组中
            if(socket02.get(j)==socket){
                break;
            }
            if(j==i){
                socket02.add(socket);
                i++;
            }
        }
        }    
        try{
            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
        }catch(IOException e){
            System.out.println("程序异常");
        }
    }
    public void run(){  
          while(true){
            try{ 
               String rd = in.readUTF();//监听客户端消息
               System.out.println(rd);
               //out.writeUTF(rd);
                new message(rd,socket02,i).start();
            }catch(IOException e){
                System.out.println("异常错误ServerThread.run()");
                return;
            }
          }
    }
}
class starts{//监听客户端
    ServerSocket server = null;
    int i=0;
    public void starts(){
        Socket you = null;   
        while(true){
            try{
                server = new ServerSocket(2010);
            }catch(IOException e){
                System.out.println("正在监听");
            }
            try{
                System.out.println("等待用户呼叫");
                you = server.accept();
                System.out.println("客户的地址:"+you.getInetAddress());                               
             }catch(IOException e){
                System.out.printf("11正在等待用户");
            }
            if(you!=null){
                new ServerThread(you).start();
            }
        }
    }
}
用数组记录下所有客户端链接的socket,当一个客户端发送消息的时候,服务端通过遍历数组中的socket
连接其他客户端转发数据包,都写完了,就差最后的连接其它客户端转发数据,我找了好久不知道怎么做,
不想用广播数据报