文档章节

Java连载129-广播数据包、网络编程总结

o
 osc_8nnvoyb1
发布于 07/13 08:38
字数 1105
阅读 22
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

一、广播数据包

1.特性

  • 这种通信类似于广播,要想实现这个功能,需要使用特殊的IP地址,要想实现多播或者广播通信的主机必须加入一个D类地址,D类地址的十进制表示范围为224.0.0.0~239.255.255.255
  • 需要使用的类是`java.net.MulticastSocket.
  • 常用的构建方法
    (1)MulticastSocket(int port) throws IOException
    创建一个多播套接字,并将其绑定到端口上。
    (2)MuticastSocket(SocketAddress bindaddr) throws IOException
    创建一个多播套接字,并将其绑定到一个指定套接字地址上。\



  • 常用的成员方法:
    (1)public void joinGroup(InetAddress mcastaddr)
    将多播套接字加入指定多播组。
    (2)public void leaveGroup(InetAddress mcastaddr)
    将多播套接字移出多播组。
    (3)public void setTimeToLive(int ttl) throws IOException
    设置在此MuticastSocket上发出的多播数据包的默认生存时间。\





  • ttl参数设置数据包最多可以跨过多少个网络:
    (1)ttl=0,数据包应该停留在本地主机;
    (2)ttl=1,数据包应该发送到本地局域网;
    (3)ttl=32,数据包应该发送到本站点的网络上;
    (4)ttl=64,数据包应该保留在本地区;
    (5)ttl=128,数据包应该保留在本大洲;
    (6)ttl=255,数据包应该可以发送到所有地方。\





  • 先写一个发送端
package com.bjpowernode.java_learning;

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

public class D129_1_BroadcastTest {
 public static void main(String[] args) {
  new D129_Broadcast().send();
 }
}
class D129_Broadcast {
 public void send() {
  String msg = "Hello,This is Broadcast Message";         //多播内容
  int port = 6666;
  InetAddress group = null;
  MulticastSocket ms = null;
  
  try {
   group = InetAddress.getByName("224.1.1.1");         //创建多播地址
   ms = new MulticastSocket(port);                     //创建多播套接字
   ms.joinGroup(group);                                //将套接字加入多播地址
   ms.setTimeToLive(1);                                //设置数据报发送范围为本地
   DatagramPacket dp = new DatagramPacket(msg.getBytes(),msg.length(),group,port);//创建待发送的数据报
   ms.send(dp);                                        //发送数据报
  }catch(IOException e) {
   System.out.println(e);
  }finally {
   ms.close();                                         //关闭套接字
  }
  
 }
}
  • 再写一个接收端的程序
package com.bjpowernode.java_learning;

import java.net.DatagramPacket;

public class D129_2_ReceiverTest {
 public static void main(String[] args) {
  new D129Receiver().receive();
 }
}
class D129Receiver{
 public void receive() {
  byte[] data = new byte[1024];                //数据缓存区
  int port = 6666;                             //多播端口号
  InetAddress group = null;
  MuticastSocket ms = null;
  
  try {
   group = InetAddress.getName("224.1.1.1"); //创建多播地址
   ms = new MulticastSocket(port);           //创建多播套接字
   ms.joinGroup(group);                      //将套接字加入到多播地址
   DatagramPacket dp = new DatagramPacket(data,data,length,group,port);
               //创建待接收的数据报
   ms.receive(dp);                           //接收数据报
   String msg = new String(dp.getData(),0,dp.getLength());
   System.out.println("接收到的数据广播数据为:"+msg);
   
   
  }catch(IOException e) {
   System.out.println(e);
  }finally {
   ms.close();                               //关闭套接字
  }
 }
}
  • 首先是运行接收端,然后运行广播端,广播将发送“Hello,This is Broadcast Message",客户端收到该消息后会将其打印出来。 129.1

总结:
(1)TCP和UDP之间的区别有哪些? TCP是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,保证传输过去的数据不会出现丢失或者乱序的情况。
UDP是无连接的数据服务,不对数据的完整性进行检查与修改,无需等待对方应答,会出现分组丢失,重复,乱序的情况,但传输效率高,实时性很好,适用于局域网内部传输。报文协议头简单。
(2)Socket的网络编程过程简述
首先是客户端,首先创建一个Socket实例,利用构造方法,绑定要通信的地址和端口,然后通过套接字的I/O流进行通信,最后通信接收,调用成员方法close()来关闭Socket;
然后是服务器端,首先建立一个ServerSocket实例,并使用构造方法来绑定本地IP地址以及端口号,用于监听将会收到的TCP请求。然后做如下循环:调用成员方法accept()来获取客户端的连接,并且返回一个Socekt实例。为返回的Socket实例创建一个线程,并且使用返回的Socket实力的I\O流与客户端通信;最后使用成员方法进行关闭。




三、源码:

    • D129_1_BroadcastTest.java
    • D129_2_ReceiverTest.java
    • https://github.com/ruigege66/Java/blob/master/D129_1_BroadcastTest.java
    • https://github.com/ruigege66/Java/blob/master/D129_2_ReceiverTest.java
    • CSDN:https://blog.csdn.net/weixin_44630050
    • 博客园:https://www.cnblogs.com/ruigege0000/
    • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包
      127.59
o
粉丝 0
博文 73
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.7K
8
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6.2K
18
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.9K
1
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
8

没有更多内容

加载失败,请刷新页面

加载更多

旋转子段 (思维stl)

题目: 大概意思就是给你一个序列,你可以选择一段区间使它左右翻折一遍,然后呢,从1到n找一遍,看a[i]==i的数最多是多少。 其实刚才我已经把暴力思路说出来了,枚举每一个区间长度,枚举每...

osc_npw5uz1o
19分钟前
0
0
回忆录

前言? 果然退役的蒟蒻不仅没有留下有价值的学习资料,甚至连能看的颓废资料都没有。 其实这一年时间里一直想写一篇像样的回忆录。 想把高三也写进去?现在高三结束了。没时间写?现在有了。...

osc_z9ptnny9
21分钟前
9
0
mysql启动失败,unit not found

1 mysql启动 Failed to start mysqld.service: Unit not found. 2 查询/etc/init.d/下是否存在mysqld ll /etc/init.d/ | grep mysqld 发现该目录下并没有mysqld的文件,若存在,请备份一下 ...

osc_um3gbrdm
22分钟前
5
0
域名解析到底应该肿么破——详解域名解析类型

原文地址:https://www.wjcms.net/archives/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E5%88%B0%E5%BA%95%E5%BA%94%E8%AF%A5%E8%82%BF%E4%B9%88%E7%A0%B4%E8%AF%A6%E8%A7%A3%E5%9F%9F%E5%90%8D%......

神兵小将
22分钟前
0
0
Java并发编程:volatile关键字解析

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

osc_3r4js8qy
24分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部