zoukankan      html  css  js  c++  java
  • 《java入门第一季》之UDP协议下的网络编程小案例

    需求,一台电脑发送数据,其他电脑都可以收到该数据。使用广播地址。

    发送端:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.InterfaceAddress;
    
    /*
     * 数据来自于键盘录入
     * 键盘录入数据要自己控制录入结束。
     */
    public class SendDemo {
    	public static void main(String[] args) throws IOException {
    		// 创建发送端的Socket对象
    		DatagramSocket ds = new DatagramSocket();
    
    		// 封装键盘录入数据
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//封装输入功能
    		String line = null;
    		while ((line = br.readLine()) != null) {//line是输入的数据
    			if ("886".equals(line)) {//结束条件
    				break;
    			}
    
    			// 创建数据并打包
    			byte[] bys = line.getBytes();
    			// DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.12.92"), 12345);
    //			DatagramPacket dp = new DatagramPacket(bys, bys.length,
    //					InetAddress.getByName("192.168.1.103"), 12345);//因为发送端给定IP,所以只能打给103这个人,不能发给别人。为了演示发给多个人看下一节代码
    			//这里的IP是目的地址的IP。
    			//为了让所有人(只要是在这个局域网之内的人)接收端都能收到信息,发送端写广播地址192.168.1.255
    			DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.1.255"),12345);
    			// 发送数据
    			ds.send(dp);
    		}
    
    		// 释放资源
    		ds.close();
    	}
    }
    

    接收端我又开了两台电脑同样的程序。代码如下:

    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    /*
     * 多次启动接收端:
     * 		java.net.BindException: Address already in use: Cannot bind
     * 		端口被占用。
     */
    public class ReceiveDemo {
    	public static void main(String[] args) throws IOException {
    		// 创建接收端的Socket对象,要给出一个要接收的端口号
    		DatagramSocket ds = new DatagramSocket(12345);
    
    		while (true) {//代表接收多次
    			// 创建一个包裹
    			byte[] bys = new byte[1024];
    			DatagramPacket dp = new DatagramPacket(bys, bys.length);
    
    			// 接收数据
    			ds.receive(dp);//把接收到的数据存放到了dp里面
    
    			// 解析数据
    			String ip = dp.getAddress().getHostAddress();
    			//String s = new String(dp.getData(), 0, dp.getLength());
    			String s = new String(bys,0,dp.getLength());//dp.getLength()实际发送的字节有多大
    			System.out.println("from " + ip + " data is : " + s);
    		}
    
    		// 释放资源
    		// 接收端应该一直开着等待接收数据,是不需要关闭
    		// ds.close();
    	}
    }
    

    此时在发送端电脑发送数据,其他两台电脑均收到了输入的数据。


  • 相关阅读:
    Windows激活客户端 已停止工作
    sevices.msc灰色处理办法
    日期求星期(java)蓝桥杯
    全排列筛选(java)
    日期类的使用(java)蓝桥杯
    蓝桥杯加法变乘法(java)
    搭积木(java)蓝桥杯
    Ftp commands and options
    随机long(Random long/NextLong)
    Windows Azure Storage Explorer List
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299734.html
Copyright © 2011-2022 走看看