// usage $ java Acumulador import java.io.*; import java.net.*; public class Acumulador { public static void main(String[] args ) throws Exception { Conteo conteo = new Conteo(); Thread tcpService = new TCPClientServer(Integer.parseInt(args[0]), conteo); Thread udpService = new UDPClientService(Integer.parseInt(args[0]), conteo); tcpService.start(); udpService.start(); } } class Conteo { synchronized public void incrA(){ A++; } synchronized public void incrB(){ B++; } synchronized public void printCount() { System.out.println("Preferencias: A:"+A+" B:"+B); } private int A=0, B=0; } class TCPClientServer extends Thread { public TCPClientServer(int port, Conteo cont) throws Exception { s = new ServerSocket(port); conteo = cont; } public void run() { while (true) { // or for (int i=0; i<2; i++) try { Socket client = s.accept( ); Thread t = new TCPClientService(client, conteo); System.out.println("New TCP client"); t.start(); } catch (Exception e){ e.printStackTrace(); } } } private ServerSocket s; private Conteo conteo; } class TCPClientService extends Thread { public TCPClientService (Socket cs, Conteo cont) { incoming = cs; conteo = cont; } public void run() { try { BufferedReader in = new BufferedReader (new InputStreamReader(incoming.getInputStream())); boolean done = false; while (!done) { String str = in.readLine(); if (str == null) done = true; else { if (str.charAt(0)=='A') conteo.incrA(); else conteo.incrB(); conteo.printCount(); } } incoming.close(); } catch (Exception e) { e.printStackTrace();} } private Socket incoming; private Conteo conteo; } class UDPClientService extends Thread { public UDPClientService (int port, Conteo cont) throws Exception { incoming = new DatagramSocket(port); conteo=cont; } public void run() { try { DatagramPacket dp = new DatagramPacket(new byte[10],10); while(true) { incoming.receive(dp); if (dp.getData()[0]=='A') conteo.incrA(); else conteo.incrB(); conteo.printCount(); } } catch (Exception e) { e.printStackTrace(); } } private DatagramSocket incoming ; private Conteo conteo; }