package NClientServer; import java.io.*; import java.net.*; import java.util.*; /** * @author Ricardo Gaspar, N35277 * */ public class MyConcurrentServer { public static void main(String[] args) throws Exception { //Conjunto dos Clientes que comunicam com o servidor Set clients = new HashSet(); Iterator clientsIterator; if( args.length != 1 ) { System.out.printf("usage: java MyServer porto\n") ; System.exit(0); } int port = Integer.parseInt(args[0]); System.out.println("Servidor iniciado!"); // inicializar o socket com o porto de atendimento DatagramSocket socket = new DatagramSocket( port ) ; for(;;) { //ciclo infinito de atendimento... //preparar uma mensagem (datagrama) vazia para recepcao... byte[] buffer = new byte[65536] ; DatagramPacket echoRequest = new DatagramPacket( buffer, buffer.length ) ; //receber a mensagem... socket.receive( echoRequest ) ; //obter o conteudo da mensagem recebida... byte[] echoRequestData = echoRequest.getData(); int echoRequestLength = echoRequest.getLength() ; //obter o endereo IP e o porto do cliente InetSocketAddress clientID = new InetSocketAddress(echoRequest.getAddress(), echoRequest.getPort()) ; //Adiciona ao conjunto de clientes conhecidos clients.add(clientID); String message = new String( echoRequestData, 0, echoRequestLength); System.out.println(message); clientsIterator = clients.iterator(); //Para cada cliente que o servidor conhea, reencaminha a mensagem enviada while(clientsIterator.hasNext()){ InetSocketAddress c = clientsIterator.next(); DatagramPacket echoReply = new DatagramPacket(message.getBytes(), 0, message.getBytes().length, c.getAddress(), c.getPort()); socket.send(echoReply); } } } }