黑马程序员——学习日记8

网络编程——UDP协议

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 UDP传输:

  发送端和接收端是两个独立运行的程序,

  两者谁先启动,有没有启动都无所谓,

  因为不需要建立连接,在我看来就像一厢情愿似的。

  既然这样也就可以用在多线程里面,而且不用同步。

  

  Socket:

  Socket就是为网络服务提供的一种机制。

  通信的两端都有Socket

  网络通信其实就是Socket间的通信

  数据在两个Socket间通过IO传输

  

  DatagramSocket类:数据包套接字类

  既能发送数据包又能接收数据包

  构造方法:

  DatagramSocket();//创建数据包套接字对象并随机绑定到本机上一个可用端口上,建议发送端使用

  DatagramSocket(int port);//创建数据包套接字对象并绑定到本机指定端口上,建议接收端使用

  常用方法:

  close();//关闭socket服务

  send(DatagramPacket dp);//发送数据包对象

  receive(DatagramPacket dp);//用数据包对象接收数据,阻塞式方法

  

  DatagramPacket类:数据包类

  构造方法:

  DatagramPacket(byte[] buf,int length);//用于接收的数据包对象

  DatagramPacket(byte[] buf,intlength,InetAddress address,int port);//用于发送的数据包对象

  常用方法:

  StringgetData();//获取具体数据内容

  InetAddress getAddress();//获取发送方的IP地址对象

  intgetPort();//获取发送方的端口号

  

  UDP发送端的建立步骤:

  1、创建UDP的socket服务,使用到DatagramSocket类的构造方法

  2、创建数据包对象,将数据的内容、接收方的IP地址对象和端口号封装进去,

     使用DatagramPacket类的构造方法

  3、通过socket服务将数据包发送出去

  4、关闭socket服务

  

  下面代码是给本机发送数据,

  因为IP地址对象里面封装的IP地址是本机的IP地址192.168.0.100,

  若是改成192.168.0.255就变成广播了,

  就是给所有192.168.0.1~192.168.0.254的IP地址发送数据。

  192.168.0.0是不能使用为IP地址的,它表示的是192.168.0.xxx这个IP地址号段。


示例:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPSendDemo_1 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		System.out.println("发送端开启");
		//1、创建UDP的socket服务,使用到DatagramSocket类的构造方法
		DatagramSocket ds=new DatagramSocket();
		
		/*
		 * 2、创建数据包对象,将数据内容、接收方的IP地址对象和端口号封装进去,
		 * 使用DatagramPacket类的构造方法
		 */
		String s="UDP发送端来了。。。。。";
		byte[] buf=s.getBytes();
		DatagramPacket dp=
				new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.100"),10000);
		
		//3、通过socket服务将数据包发送出去
		ds.send(dp);
		
		//4、关闭socket服务
		ds.close();
	}
}

 UDP接收端的建立步骤:

  1、创建UDP的socket服务,使用DatagramSocket类的构造方法,注意要指定好端口号

  2、创建数据包对象,将字节数组封装进去,用于接收传来的数据,使用DatagramPacket类的构造方法

  3、通过socket服务将数据接收到数据包对象里

  4、数据包对象对数据进行解析,获取包括具体数据内容,发送方的IP地址对象和端口号等信息

  5、关闭socket服务


示例:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceDemo_1 {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		System.out.println("接收端开启");
		//1、创建UDP的socket服务,使用DatagramSocket类的构造方法,注意要指定好端口号
		DatagramSocket ds=new DatagramSocket(10000);
		
		//2、创建数据包对象,将字节数组封装进去,用于接收传来的数据,使用DatagramPacket类的构造方法
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,buf.length);
		
		//3、使用socket服务将数据接收到数据包对象里
		ds.receive(dp);//阻塞式方法,如果没有内容发来则一直等待。
		
		//4、数据包对象对数据进行解析,获取包括具体数据内容,发送方的IP地址对象和端口号等信息
		//获取具体数据内容
		byte[] strBuf=dp.getData();
		String s=new String(strBuf,0,dp.getLength());
		//获取ip地址对象,然后调用getHostAddress方法获取ip地址
		String ip=dp.getAddress().getHostAddress();
		//获取发送方的端口号
		int port=dp.getPort();
		System.out.println(ip+":"+port+":"+s);
		
		//5、关闭socket服务
		ds.close();
	}
}

先开启接收端,在开启发送端,两个代码运行结果如下图

发送端方面:


接收端方面:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值