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

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

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

举例说明1:
服务器端

Java代码 收藏代码
  1. publicclassSimpleUDPServer{
  2. finalstaticintSERVER_PORT=30000;
  3. finalstaticintPACKET_SIZE=4092;
  4. publicstaticvoidmain(String[]args){
  5. DatagramSocketdatagramSocket=null;
  6. DatagramPacketdatagramPacket=null;
  7. try{
  8. while(true){
  9. //创建datagramSocket,准备用于发送和接收数据报
  10. datagramSocket=newDatagramSocket(SERVER_PORT);
  11. datagramPacket=newDatagramPacket(newbyte[PACKET_SIZE],
  12. PACKET_SIZE);
  13. //使用一个空的packet去装datagramSocket接收到的数据
  14. datagramSocket.receive(datagramPacket);
  15. //将datagramPacket中接收到的字节数组转换为字符串,然后输出
  16. System.out.println(newString(datagramPacket.getData(),0,
  17. datagramPacket.getLength()));
  18. }
  19. }catch(IOExceptione){
  20. e.printStackTrace();
  21. }
  22. }
  23. }

客户端:

Java代码 收藏代码
  1. publicclassSimpleUDPClient{
  2. finalstaticintSERVER_PORT=30000;
  3. publicstaticvoidmain(String[]args){
  4. DatagramSocketdatagramSocket=null;
  5. DatagramPacketdatagramPacket=null;
  6. try{
  7. //创建datagramSocket,准备用于发送和接收数据报
  8. //datagramSocket使用动态端口(以便选择一个空闲的端口)
  9. datagramSocket=newDatagramSocket();
  10. Stringcontent="Java学习系列(十八)Java面向对象之基于UDP协议的网络通信";
  11. //创建一个有数据、有目的地址的datagramPacket
  12. datagramPacket=newDatagramPacket(content.getBytes(),content
  13. .getBytes().length,InetAddress.getByAddress(newbyte[]{
  14. (byte)192,(byte)168,0,8}),SERVER_PORT);
  15. //发送数据报
  16. datagramSocket.send(datagramPacket);
  17. }catch(IOExceptione){
  18. e.printStackTrace();
  19. }
  20. }
  21. }

MulticastSocket将数据报发送到“广播地址”,数据报会被自动“广播”到所有加入该IP地址的客户端。
TTL是控制数据可以跨过多少个网段。
--当ttl为0时,说明该数据报只能停留在本机;
--当ttl为1时,说明数据报只能停留在当前局域网。
--当ttl为32时,说明数据报只能停留在本站点的网络。
--当ttl为64时,说明数据报只能停留在本地区。
--当ttl为128时,说明数据报只能停留在本大洲(如亚洲)。
--当ttl为255时,说明数据报达到全球。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值