示例:UDP多人聊天
接收者:
1 package cn.kgc.demo12; 2 3 import java.net.DatagramPacket; 4 import java.net.DatagramSocket; 5 import java.net.InetAddress; 6 7 //接收数据 8 public class Receiver implements Runnable { 9 public void run() { 10 DatagramSocket socket = null; 11 try { 12 socket = new DatagramSocket(10000); 13 14 // 创建用于保存接收数据的数据包 15 byte[] buf = new byte[1024]; 16 DatagramPacket packet = new DatagramPacket(buf, buf.length); 17 18 while (true) { 19 // 接收数据 20 socket.receive(packet); 21 // 获取包裹中的数据 22 byte[] data = packet.getData(); 23 int dataLength = packet.getLength(); 24 String msg = new String(data, 0, dataLength); 25 InetAddress addr = packet.getAddress(); 26 int port = packet.getPort(); 27 System.out.println(addr.getHostName() + "通过" + port + "端口发送的消息:" + msg); 28 } 29 }catch(Exception ex){ 30 ex.printStackTrace(); 31 } finally { 32 socket.close(); 33 } 34 } 35 }
发送者:
1 package cn.kgc.demo12; 2 3 import java.net.DatagramPacket; 4 import java.net.DatagramSocket; 5 import java.net.InetAddress; 6 import java.util.Scanner; 7 8 //使用udp发送数据 9 public class Sender implements Runnable { 10 // DatagramPacket 包裹 11 // DatagramSocket 快递员 12 public void run() { 13 Scanner input = new Scanner(System.in); 14 DatagramSocket socket = null; 15 try { 16 socket = new DatagramSocket(); 17 InetAddress address = InetAddress.getByName("255.255.255.255"); 18 int port = 10000; 19 while (true) { 20 String msg = input.nextLine(); 21 byte[] buf = msg.getBytes(); 22 // 要发送的数据包 23 DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port); 24 socket.send(packet); 25 if ("bye".equals(msg)) { 26 break; 27 } 28 } 29 } catch (Exception e) { 30 e.printStackTrace(); 31 } finally { 32 socket.close(); 33 } 34 35 } 36 37 }
测试
1 package cn.kgc.demo12; 2 3 public class Chat { 4 public static void main(String[] args) { 5 new Thread(new Receiver()).start(); 6 new Thread(new Sender()).start(); 7 } 8 }