Java: Multithreading & Socket UDP Programmation

Je suis nouveau sur le multithreading & socket de programmation en Java. Je voudrais savoir quelle est la meilleure façon de mettre 2 fils - un pour recevoir un support et une pour l'envoi d'un socket. Si ce que je suis en train de faire semble absurde, s'il vous plaît laissez-moi savoir pourquoi! Le code est largement inspiré de Soleil des tutoriels en ligne.Je veux utiliser la Multidiffusion sockets afin que je puisse travailler avec un groupe de multidiffusion.

class Server extends Thread
{
static protected MulticastSocket socket = null;
protected BufferedReader in = null;
public InetAddress group;
private static class Receive implements Runnable
{
public void run()
{
try
{
byte[] buf = new byte[256];
DatagramPacket pkt = new DatagramPacket(buf,buf.length);
socket.receive(pkt);
String received = new String(pkt.getData(),0,pkt.getLength());
System.out.println("From server@" + received);          
Thread.sleep(1000);
}
catch (IOException e)
{ 
System.out.println("Error:"+e);
}   
catch (InterruptedException e)
{ 
System.out.println("Error:"+e);
}   
}
}
public Server() throws IOException
{
super("server");
socket = new MulticastSocket(4446);
group = InetAddress.getByName("239.231.12.3");
socket.joinGroup(group);
}
public void run()
{
while(1>0)
{   
try
{
byte[] buf = new byte[256];
DatagramPacket pkt = new DatagramPacket(buf,buf.length);        
//String msg = reader.readLine();
String pid = ManagementFactory.getRuntimeMXBean().getName();
buf = pid.getBytes();
pkt = new DatagramPacket(buf,buf.length,group,4446);
socket.send(pkt);
Thread t = new Thread(new Receive());
t.start();
while(t.isAlive())
{ 
t.join(1000);
}
sleep(1);
}
catch (IOException e)
{ 
System.out.println("Error:"+e);
}   
catch (InterruptedException e)
{ 
System.out.println("Error:"+e);
}   
}
//socket.close();
}
public static void main(String[] args) throws IOException
{
new Server().start();
//System.out.println("Hello");
}
}
Quel est votre objectif final?
J'ai corrigé votre mise en forme, mais vous devez modifier les noms de classe... leur faire commencer avec une lettre majuscule. C'est pénible à lire votre code lors de votre classe les noms commencent par les lettres minuscules.
Mon objectif final est de mettre en œuvre certaines des protocoles dans un système distribué @Lirik: je Suis désolé pour les noms de classe! J'ai fixé maintenant.
Bon à entendre une réponse qui utilise ExecuterService lorsque vous traitez avec les sockets udp

OriginalL'auteur Ravi | 2010-04-21