我是多线程新手& Java编程的套接字编程。我想知道什么是实现2个线程的最佳方式 - 一个用于接收套接字,另一个用于发送套接字。如果我想要做的事听起来很荒谬,请让我知道为什么!代码主要来自Sun的在线教程。我想使用多播套接字,以便我可以使用多播组。Java:多线程和UDP套接字编程
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 [email protected]" + 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");
}
}
你最终的目标是什么? – Xailor 2010-04-21 23:48:43
@Ravi,我修正了你的格式,但你应该编辑类名......让它们以大写字母开头。当你的班级名称以小写字母开头时,阅读你的代码是很痛苦的。 – Kiril 2010-04-22 00:49:49
@Xepoch:我的最终目标是在分布式系统中实现某些协议 @Lirik:对于类名称感到抱歉!我现在修好了。 – Ravi 2010-04-22 12:44:22