24. september 2003 - 19:50Der er
22 kommentarer og 1 løsning
Flere DatagramSocket via tråde
Jeg skal have sendt fx 10 pakker til 10 forskellige ip'er. Jeg har en timeout på 2000 ms, hvis alle pakker fejler vil det så tage 20 sec får jeg får svar om at alle pakker fejlede. Er der ikke muligt at lave 10 tråde som sender til hver ip på "samme" tid, så der i alt kun går 2 sec, ligemeget hvor mange ip'er der sendes til ?
Jeg har prøvet at gøre sådan her, men uden held: public HLServerThread(String hostname) { this.hostname = hostname; }
public synchronized void run() { try { DatagramSocket socket = new DatagramSocket(); socket.setSoTimeout(2000);
DatagramPacket recvPacket = new DatagramPacket(recvData, recvData.length); socket.receive(recvPacket); socket.close();
En lille test klasse: Vector v = new Vector(); HLServerThread server; double time1 = System.currentTimeMillis();
for (int i = 0 ; i < 10 ; i++) { server = new HLServerThread("137.224.240.7:27015"); Runnable runner = server;
Thread t1 = new Thread(runner);
t1.start();
t1.join();
v.add(server); }
Mit problem ligger også i at jeg har t1.join(), den vil vente til tråden er færdig, men har jeg den ikke med får jeg ikke udført alt det i run metoden.
long start = System.currentTimeMillis(); MyThread[] t = new MyThread[10]; for(int i = 0; i < t.length; i++) { t[i] = new MyThread(); } for(int i = 0; i < t.length; i++) { t[i].start(); } for(int i = 0; i < t.length; i++) { try { t[i].join(); } catch (InterruptedException e) { // ignore } } long end = System.currentTimeMillis();
HLServerThread[] t = new HLServerThread[10]; for(int i = 0; i < t.length; i++) { t[i] = new HLServerThread("137.224.240.7:27015"); } for(int i = 0; i < t.length; i++) { t[i].start(); } for(int i = 0; i < t.length; i++) { t[i].join(); }
HLServerThread[] t = new HLServerThread[10]; double time1 = System.currentTimeMillis();
for(int i = 0; i < t.length; i++) { t[i] = new HLServerThread("137.224.240.7:27015"); } for(int i = 0; i < t.length; i++) { t[i].start(); } for(int i = 0; i < t.length; i++) { t[i].join(); }
virker, men min constructor laver ikke så meget endnu, skal jeg flytte selve DatagramSocket oprettelse om i constructoren, den havde jeg lagt i run metoden
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.