package Day10; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.util.Scanner; /** * 聊天消息接受者 * @author Administrator * */ class Receiver implements Runnable { public void run() { DatagramSocket ds = null; try { /** * 创建接收端 * 1、DatagramSocket(int port) * 构造一个数据报套接字绑定到本地主机上的指定端口。 */ ds = new DatagramSocket(12345); while(true) { // 接收数据包 byte[] data = new byte[1024]; DatagramPacket dp = new DatagramPacket(data, data.length); ds.receive(dp); // 获取接收到的数据包的信息 /** * 1、InetAddress类型 getAddress() * 返回机器的IP地址的数据报发送或者接收的数据报。 (数据报二进制) * 2、getHostAddress() * 返回的IP地址字符串的文本表示。 * */ String msg = new String(data, 0, dp.getLength()); String ip = dp.getAddress().getHostAddress(); //int port = dp.getPort(); System.err.println(ip + msg); } }catch(Exception e) { e.getStackTrace(); }finally { // 关闭套接字 if(ds != null) ds.close(); } } } /** * 聊天消息发送者 * @author Administrator * */ class Sender implements Runnable{ Scanner s = null; DatagramSocket ds = null; @Override public void run() { try { // 创建发送端 ds = new DatagramSocket(); // 设置端口和ip int port = 12345; String ip = "172.180.8.50"; // 创建控制台扫描器 s = new Scanner(System.in); while(true) { // 读取控制台信息 // System.out.println("--------没有格式,直接输入--------"); String str = "cjj: "+ s.nextLine(); byte[] msg = str.getBytes(); /** * 发送数据 * 1、InetSocketAddress(InetAddress addr, int port) * 创建一个套接字地址的IP地址和端口号。 * 2、 getSocketAddress() * 得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。 * 3、send(DatagramPacket p) * 从这个套接字发送一个数据报包。 */ DatagramPacket dp = new DatagramPacket(msg, msg.length); dp.setSocketAddress(new InetSocketAddress(ip , port)); ds.send(dp); } }catch(Exception e) { e.getStackTrace(); }finally { if(ds != null) ds.close(); if(s != null) s.close(); } } } public class QQ { public static void main(String[] args) throws Exception { new Thread(new Sender()).start(); new Thread(new Receiver()).start(); } }
package QQ; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; import java.util.Scanner; public class QQ1 { public static void main(String[] args) { new Thread(new Sender()).start(); new Thread(new Receiver()).start(); } } class Sender implements Runnable { @Override public void run() { Scanner sc = new Scanner(System.in); DatagramSocket ds = null; try { ds = new DatagramSocket(); while (true) { System.out.print("请输入发送的内容 :"); String str = sc.nextLine(); DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length); dp.setSocketAddress(new InetSocketAddress("172.180.8.50", 12345)); ds.send(dp); System.out.println(); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) ds.close(); if (sc != null) sc.close(); } } } class Receiver implements Runnable { @Override public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(12345); while (true) { byte[] data = new byte[1024]; DatagramPacket dp = new DatagramPacket(data, data.length); ds.receive(dp); String str = new String(data, 0, dp.getLength()); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); System.err.println("老刘:" + str); } } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) { ds.close(); } } } }