今天学习了一下利用UDP传输协议进行的socket通讯。
先上代码:
class Send implements Runnable { private DatagramSocket ds; Send(DatagramSocket ds) { this.ds = ds; } @Override public void run() { try { BufferedReader bufr = new BufferedReader(new InputStreamReader( System.in)); String line = null; while ((line = bufr.readLine()) != null) { if ("886".equals(line)) { break; } byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("211.64.154.152"), 10002); ds.send(dp); } } catch (Exception e) { throw new RuntimeException("发送端失败"); } } } class Rece implements Runnable { private DatagramSocket ds; Rece(DatagramSocket ds) { this.ds = ds; } @Override 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 e) { throw new RuntimeException("接收失败"); } } } class ChatDemo { public static void main(String[] args) { try { DatagramSocket sendSocket = new DatagramSocket(); DatagramSocket receSocket = new DatagramSocket(10002); new Thread(new Send(sendSocket)).start(); new Thread(new Rece(receSocket)).start(); } catch (Exception e) { e.printStackTrace(); } } }
在主函数中,利用DatagramSocket,写出两个线程,一个用于发送,一个用于接收。