今天看了一下,UDP的相关内容 感觉挺有意思的。
原理就是建立两个线程,一个接收消息 一个发送消息
启动类:
1 package chatTest; 2 3 public class ChatStart { 4 public static void main(String[] args) { 5 // 开启两个线程一个用来发送消息 一个来接受消息 6 MsgSender msgSender = new MsgSender(); 7 MsgRecevier msgRecevier = new MsgRecevier(); 8 msgRecevier.start(); 9 msgSender.start(); 10 } 11 }
发送消息类:
1 package chatTest; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.DatagramPacket; 7 import java.net.DatagramSocket; 8 import java.net.InetAddress; 9 10 public class MsgSender extends Thread { 11 @Override 12 public void run() { 13 // 建立UDP服务 14 DatagramSocket socket; 15 try { 16 socket = new DatagramSocket(); 17 // 准备数据,将其封装到数据包中发送 18 BufferedReader bReader = new BufferedReader(new InputStreamReader( 19 System.in)); 20 String line = bReader.readLine(); 21 while (line != null) { 22 DatagramPacket packet = new DatagramPacket(line.getBytes(), 23 line.getBytes().length, 24 InetAddress.getByName("192.168.1.255"), 9999); 25 socket.send(packet); 26 line = bReader.readLine(); 27 } 28 // 关闭资源 29 socket.close(); 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } 33 } 34 35 }
接受消息类:
1 package chatTest; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 7 public class MsgRecevier extends Thread { 8 @Override 9 public void run() { 10 11 try { 12 // 建立UDP服务 监听一个端口 13 DatagramSocket socket = new DatagramSocket(9999); 14 // 准备空的数据包存储数据 15 byte[] buf = new byte[1024]; 16 DatagramPacket packet = new DatagramPacket(buf, buf.length); 17 Boolean flag = true; 18 while (flag) { 19 socket.receive(packet); 20 System.out.println(packet.getAddress().getHostAddress() + ":\t" 21 + new String(buf, 0, packet.getLength())); 22 } 23 // 关闭资源 24 socket.close(); 25 } catch (IOException e) { 26 e.printStackTrace(); 27 } 28 } 29 30 }