UDP协议发送信息和接收信息
 发布时间 
 阅读量: 
 阅读量 
1 UDP协议
- UDP ==>User Datagram Protocol :用户数据包协议
 
1.1 UDP特点
- 
面向无连接的协议,发送端不管接收端是否存在;当接收端接收到数据时,无需反馈是否已接收到数据.
- 发送数据大小限制在64KB以内.
 
 
通过数据打包传输信息:为了传递信息,将信息源与接收端整合为一个打包单位,将其打包内容发送至目标地址。
- 
因为是面向无连接,速度快但不可靠.
 
1.2 应用场景
* 即时通讯(QQ,微信,飞秋)
* 在线视频
* 网络语音电话
        1.3 利用UDP协议发送信息和接收信息
* 发送端代码实现
                      1. //UDP协议发送端
        
              2. import java.io.IOException;
        
              3. import java.net.DatagramPacket;
        
              4. import java.net.DatagramSocket;
        
              5. import java.net.InetAddress;
        
              6. /*
        
              7.  * DatagramSocket():创建发送端的Socket对象.
        
              8. void send(DatagramPacket p):发送数据包
        
              9. DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组,
        
              10.      length表示接受到的字节长度,address表示IP地址,port表示进程端口号.
        
              11.  */
        
              12. public class UDPOutput {
        
              13.  
        
              14. 	public static void main(String[] args) throws IOException{
        
              15. 		//创建发送端的Socket对象
        
              16. 		DatagramSocket ds =new DatagramSocket();
        
              17. 		/*DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组,
        
              18. 		length表示接受到的字节长度,address表示IP地址,port表示进程端口号.*/
        
              19. 		String buf ="好好学习,努力向上";
        
              20. 		DatagramPacket data =new DatagramPacket(buf.getBytes(),
        
              21. 				buf.getBytes().length, InetAddress.getLocalHost(), 8087);
        
              22. 		//发送数据报包
        
              23. 		ds.send(data);
        
              24. 		//释放资源
        
              25. 		ds.close();
        
              26. 	}
        
              27. }
        - 接收端代码实现
        1. import java.io.IOException;
    
        2. import java.net.DatagramPacket;
    
        3. import java.net.DatagramSocket;
    
        4.  
    
        5. /*
    
        6.  *  DatagramPacket(byte[]buf,int length)创建数据报包buf表示接受到的字节数组,length表示接受到的字节长度.
    
        7. DatagramSocket(int port):创建接收端的Socket对象并将其绑定本机指定的指定端口.
    
        8. void receive(DatagramPacket p):接受数据包
    
        9.     10.  */
    
        11. public class UDPInput {
    
        12.  
    
        13. 	public static void main(String[] args) throws IOException {
    
        14. 		// 创建接收端的Socket对象并将其绑定本机指定的指定端口
    
        15. 		DatagramSocket data = new DatagramSocket(64720);
    
        16. 		// 创建接收端的数据报包
    
        17. 		byte[] buf = new byte[1024];
    
        18. 		DatagramPacket p = new DatagramPacket(buf, buf.length);
    
        19. 		// 接收数据报包
    
        20. 		data.receive(p);
    
        21.  
    
        22. 		// 获取接收的数据报包中数据长度
    
        23. 		int len = p.getLength();
    
        24. 		System.out.println(len);
    
        25. 		// 打印接收到的数据
    
        26. 		System.out.println(new String(buf, 0, len));
    
        27. 		// 获取发动端的主机名和IP地址
    
        28. 		String pathname = p.getAddress().getHostName();
    
        29. 		String IP = p.getAddress().getHostAddress();
    
        30. 		System.out.println(pathname);
    
        31. 		System.out.println(IP);
    
        32. 		// 获取发送端端口号
    
        33. 		int port = p.getPort();
    
        34. 		System.out.println(port);
    
        35.  
    
        36. 		// 关闭资源,释放端口号
    
        37. 		data.close();
    
        38. 	}
            }
        1.3 利用UDP协议发送飞秋信息的代码实现
        1. import java.io.IOException;
    
        2. import java.net.DatagramPacket;
    
        3. import java.net.DatagramSocket;
    
        4. import java.net.InetAddress;
    
        5.  
    
        6. /*
    
        7.  * DatagramSocket():创建发送端的Socket对象.
    
        8. DatagramSocket(int port):创建接收端的Socket对象并将其绑定本机指定的指定端口.
    
        9. void send(DatagramPacket p):发送数据包
    
        10. void receive(DatagramPacket p):接受数据包
    
        11. 方法: DatagramPacket(byte[]buf,int length)创建数据报包buf表示接受到的字节数组,length表示接受到的字节长度.
    
        12. DatagramPacket(byte[]buf,int length,InentAddress address,int port):创建数据报包,buf表示接收的字节数组,
    
        13. length表示接受到的字节长度,address表示IP地址,port表示进程端口号.
    
        14.  */
    
        15. public class UDPOutputStream {
    
        16.  
    
        17. 	public static void main(String[] args) throws IOException {
    
        18. 		//创建发送端的Socket对象
    
        19. 		DatagramSocket data = new DatagramSocket();
    
        20. 		//创建发送对象
    
        21. 		String mun="好好学习java,学业有成之时来我公司上班!";
    
        22. 		byte[]buf=addString(mun);
    
        23. 		//创建数据报包,若此IP地址为"192.168.137.255",则代表此网段"192.168.137.XXX"下的所有用户
    
        24. 		//飞秋的进程端口默认是2425
    
        25. 		DatagramPacket p =new DatagramPacket(buf, buf.length,
    
        26. 				InetAddress.getByName("192.168.137.1"),2425);
    
        27. 		//发送数据报包
    
        28. 		data.send(p);
    
        29. 		//关闭资源,
    
        30. 		data.close();
    
        31. 	}
    
        32. 	/*
    
        33. 	 * 飞秋的信息发送格式:
    
        34. 	 * "version:data:sender:IP:flag"
    
        35. 	 * "版本号:发送时间:发送项目名称:发送端的IP地址:发送内容的标志位"
    
        36. 	 */
    
        37. 	public static byte[] addString(String mun) {
    
        38. 		//版本号
    
        39. 		String version ="1.0:";
    
        40. 		//发送时间
    
        41. 		long data =System.currentTimeMillis();
    
        42. 		//发送项目名称
    
        43. 		String sender ="马化腾:";
    
        44. 		//发送端的IP地址
    
        45. 		String IP="000.000.1.1:";
    
        46. 		//标志位,发送文本信息的标志位是:32
    
        47. 		String flag ="32:";
    
        48. 		String bString=version+data+":"+sender+IP+flag+mun;
    
        49. 		byte []buf=bString.getBytes();
    
        50. 		return buf;
    
        51. 	}
    
        52. }
        全部评论 (0)
 还没有任何评论哟~ 
