Java 网络编程 IP 端口 协议 UDP的三种通信方式

网络编程概述

网络编程:在网络通信协议下,不同计算机上运行的程序,可以进行数据传输

网络编程三要素

1.IP地址 

设备在网络中的地址,是唯一的标识

全程互联网协议地址  也成IP地址,是分配给上网设备的数字标签。常见的IP分类为ipv4和ipv6

ipv4:

Ipv6:128bit 分成8组

IP常用命令 (用cmd运行)

ipconfig:查看本机IP地址

ping IP地址:检查网络是否连通

特殊IP地址: 127.0.0.1:是回送地址也称本地回环地址,可以代表本机的IP地址,一般用来测试使用

InetAddress 的使用

为了方便我们对IP地址的获取和操作,Java提供了一个类InetAddress 供我们使用

InetAddress:此类表示Internet协议(IP)地址

方法名

说明

static InetAddress getByName​(String host)

确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址

String getHostName​()

获取此IP地址的主机名

String getHostAddress​()

返回文本显示中的IP地址字符串

 

2.端口

应用程序在设备中唯一的标识

端口号:两个字节表示的整数,取值范围是0-65535

其中0~1023之间的端口号用于一些知名的网络服务或者应用。              

我们自己使用1024以上的端口号就可以了。

注意:一个端口号只能被一个应用程序使用。

3.协议

 

计算机网络中,连接和通信的规则被称为网络通信协议,常见的协议有UDP协议和TCP协议

UDP协议

用户数据报协议(User Datagram Protocol)

UDP是面向无连接通信协议。(发送数据不管有没有连接,有连接就成功 没连接就失败)

 速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。

TCP协议

传输控制协议 (Transmission Control Protocol) TCP协议是面向连接的通信协议。        

速度慢,没有大小限制,数据安全。

UDP通信程序

udp发送数据 

1创建发送端DatagramSocket对象

2创建数据,并把数据打包(DatagramPacket)

DatagramPacket(byte[] buf,int length,InetAddress address,int port)

第一个参数是数据 ,第二个参数是长度  第三个是发送到哪个IP  第四个是发送的端口

3调用DatagramSocket对象的方法发送数据

4释放资源

代码:

public static void main(String[] args) throws IOException {
    //创建码头对象
    DatagramSocket ds =new DatagramSocket();
    String s ="要发送的信息";
    byte[] bytes =s.getBytes();
    InetAddress address =InetAddress.getByName("127.0.0.1");
    //随便定义个1024以后的端口
    int port =10000;
    //DatagramPacket(byte[] buf,int length,InetAddress address,int port)
    DatagramPacket dp =new DatagramPacket(bytes,bytes.length,address,port);
    //码头发送包裹
    ds.send(dp);
    //释放资源
    ds.close();
}

UDP接收数据

1.创建接收端的DatagramSocket对象

2.创建箱子,用于接收数据

3.调用DatagramSocket的方法接收数据并将数据放入箱子中

4.解析数据包,并把数据在控制台显示

5.释放资源

代码:

public class Server {
    public static void main(String[] args) throws IOException {
        //表示接收端从10000端口接收数据
        DatagramSocket ds =new DatagramSocket(10000);
        byte[] bytes =new byte[1024];
        //创建用来接收的箱子
        DatagramPacket dp =new DatagramPacket(bytes, bytes.length);
        //接收数据,把数据放到新箱子中
        ds.receive(dp);
        //获取得到的数据的长度
        int length =dp.getLength();
        //从新的箱子中获取数据  
        // 这行其实也能省略 因为传来的数据已经在bytes中了
        byte[] data =dp.getData();
        System.out.println(new String(data,0,length));
        //释放数据
        ds.close();
    }
}

注意

1.要先运行接收端,再运行发送端

2.如果接收端在启动之后,没有接收到数据,那么会死等(阻塞)

3.在接受数据的时候需要调用getLength方法,表示接收到了多少字节

UDP的三种通信方式

单播 : 点对点,一对一

组播 :

一对多,一个发送端通过路由器将数据发给多个接收端

广播:

一个发送端,通过路由器发送给所有的接收端

UDP组播代码实现:

组播地址:224.0.0.0——239.255.255.255

其中224.0.0.0 ~ 224.0.0.255 为预留的组播地址

发送端 

跟单对单差不多 ,地址改成组播的地址就可以了

public static void main(String[] args) throws IOException {
 DatagramSocket ds =new DatagramSocket();
 InetAddress address =InetAddress.getByName("224.0.1.0");
 int port =10000;

        String s = "你好组播";
        byte[] bytes=s.getBytes();
        DatagramPacket dp =new DatagramPacket(bytes, bytes.length,address,port);
        ds.send(dp);
    ds.close();
}

接收端

1需要对应端口,2然后要加入组播的地址

public static void main(String[] args) throws IOException {
    MulticastSocket ms = new MulticastSocket(10000);
    byte[] bytes = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    //把当前计算机加入该组播地址
    ms.joinGroup(InetAddress.getByName("224.0.1.0"));
    //获取传过来的内容
    ms.receive(dp);
    int length = dp.getLength();
    String s = new String(bytes, 0, length);
    System.out.println(s);
    ms.close();
}

UDP广播代码实现

发送端:第三步需要修改

发送的地址需要改成广播的地址:255.255.255.255

接收端:就跟单播的一模一样 不需要修改,只需要端口对应就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值