Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

UDP协议:无需建立虚拟链路,协议是不可靠的。
A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达;但有些情况下,数据报可能会丢失 --丢失了也不管。

先了解2个类:
DatagramSocket:相当于“码头”,此类表示用来发送和接收数据报的套接字。 
DatagramPacket:代表数据报。

举例说明1:
服务器端

public class SimpleUDPServer {
	final static int SERVER_PORT = 30000;
	final static int PACKET_SIZE = 4092;

	public static void main(String[] args) {
		DatagramSocket datagramSocket = null;
		DatagramPacket datagramPacket = null;
		try {
			while (true) {
				// 创建datagramSocket,准备用于发送和接收数据报
				datagramSocket = new DatagramSocket(SERVER_PORT);
				datagramPacket = new DatagramPacket(new byte[PACKET_SIZE],
						PACKET_SIZE);
				// 使用一个空的packet去装datagramSocket接收到的数据
				datagramSocket.receive(datagramPacket);
				// 将datagramPacket中接收到的字节数组转换为字符串,然后输出
				System.out.println(new String(datagramPacket.getData(), 0,
						datagramPacket.getLength()));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
客户端:
public class SimpleUDPClient {
	final static int SERVER_PORT = 30000;

	public static void main(String[] args) {
		DatagramSocket datagramSocket = null;
		DatagramPacket datagramPacket = null;
		try {
			// 创建datagramSocket,准备用于发送和接收数据报
			// datagramSocket使用动态端口(以便选择一个空闲的端口)
			datagramSocket = new DatagramSocket();
			String content = "Java学习系列(十八)Java面向对象之基于UDP协议的网络通信";

			// 创建一个有数据、有目的地址的datagramPacket
			datagramPacket = new DatagramPacket(content.getBytes(), content
					.getBytes().length, InetAddress.getByAddress(new byte[] {
					(byte) 192, (byte) 168, 0, 8 }), SERVER_PORT);
			// 发送数据报
			datagramSocket.send(datagramPacket);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
MulticastSocket将数据报发送到“广播地址”,数据报会被自动“广播”到所有加入该IP地址的客户端。
TTL是控制数据可以跨过多少个网段。
--当ttl为0时,说明该数据报只能停留在本机;
--当ttl为1时,说明数据报只能停留在当前局域网。
--当ttl为32时,说明数据报只能停留在本站点的网络。
--当ttl为64时,说明数据报只能停留在本地区。
--当ttl为128时,说明数据报只能停留在本大洲(如亚洲)。
--当ttl为255时,说明数据报达到全球。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值