/* 编写一个聊天程序。 有两部分,发送和接收,这两部分需要同时进行,就需要用到多线程技术。 一个线程控制发送,一个控制接收。 因为接收和发送时不同的动作,所以需要两个run方法,定义在两个类中。 */ import java.net.*; import java.io.*; import java.lang.Exception; class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds = ds; } public void run() { try { BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line = buffr.readLine()) != null) { if("886".equals(line)) break; byte [] buff = line.getBytes(); DatagramPacket dp = new DatagramPacket(buff,0,buff.length,InetAddress.getByName("122.88.30.178"),10001); ds.send(dp); } ds.close(); } catch (Exception ex) { throw new RuntimeException("发送端失败。"); } } } class Receive implements Runnable { private DatagramSocket ds; public Receive(DatagramSocket ds) { this.ds = ds; } public void run() { try { while(true) { byte [] buf =new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); System.out.println(ip + ".." + data); } } catch (Exception ex) { throw new RuntimeException("接收端失败。"); } } } class ChatDemo { public static void main(String [] args) throws Exception { DatagramSocket dsSend = new DatagramSocket(); DatagramSocket dsReceive = new DatagramSocket(10001); new Thread(new Send(dsSend)).start(); new Thread(new Receive(dsReceive)).start(); } }