UDP通信

1
2
3
4
5
6
7
8
9
10
11
12
/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/

  

InetAddress类

IP是网络中存在一个数据,那么Java针对这类特殊的数据,会使用对应的类进行描述、封装。

学习Java中的网络编程,对应的类和接口都在java.net包下:

Java中使用InetAddress类描述封装IP对象。只要在程序中我们需要操作ip地址,只能通过InetAddress对象进行完成。

InetAddress类中没有构造方法,只能通过其中的静态的方法获取到InetAddress对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class TestInetAddress {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
         
        try {
             InetAddress obj=  InetAddress.getLocalHost();//获得本地主机
              
             System.out.println(obj.getHostAddress()); //返回主机地址(ip)
              
             InetAddress obj2=InetAddress.getByName("www.taobao.com");
              
             System.out.println(obj2.getHostAddress());//返回的是ip
              
             System.out.println(obj2.getHostName());//返回主机名 www.taobao.com
              
             InetAddress[] arr=InetAddress.getAllByName("www.taobao.com");
              
             for(InetAddress ipobj:arr)
                 System.out.println(ipobj.getHostAddress());
              
             InetAddress obj3=InetAddress.getByName("192.168.1.136");
             
             System.out.println(obj3.getHostAddress());//192.168.1.136
              
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
 
}

  

UDP通信 

DatagramSocket对象介绍

UDP协议是面向无连接的协议,发送数据的一方尽管发送数据,它不关心接收方是否在接收数据。

在Java中使用DatagramSocket对象表示基于UDP协议的发送端或者是接收端。

数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

DatagramPacket对象介绍

数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。

DatagramPacket:它本身负责的对基于UDP协议发送或者接收的数据进行打包或者拆包的。

如何区分DatagramPacket对象到底是打包还是拆包的对象:完全依赖创建DatagramPacket对象时调用的构造方法。

代码实现案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.wowowo.udp;
 
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
 
public class UdpReceive {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        //1.创建码头 接收端的码头需要添加端口号,发送端端口号要跟接收端的端口号一致
        try {
            DatagramSocket datagramSocket=new DatagramSocket(8888);
             
            //2.创建packet 用来接收传递过来的数据
            byte[] data=new byte[1024];
            int length=data.length;
            DatagramPacket datagramPacket=new DatagramPacket(data, length);
             
            //3.接收数据
            datagramSocket.receive(datagramPacket);
             
            String ip=datagramPacket.getAddress().getHostAddress();
             
            String msg=new String(data);
             
            System.out.println("接收到来自"+ip+"的信息:"+msg);
             
            //4.关闭码头
            datagramSocket.close();
             
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
         
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.wowowo.udp;
 
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
 
public class UdpSend {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        //发送端
        try {
             
             
            //1.创建一个socket(码头)
            DatagramSocket datagramSocket=new DatagramSocket();
             
            //2.创建packet (集装箱)
            byte[] data="呆萌老师你好".getBytes();
            int length=data.length;
            InetAddress ip=InetAddress.getByName("192.168.31.111");
            int port=8888; // 0-1023端口号一般是常用的知名的程序的端口号    65535以内
             
            //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
             
            DatagramPacket datagramPacket=new DatagramPacket(data, length, ip, port);
             
            //3.发送
            datagramSocket.send(datagramPacket);
             
            //4.关闭码头
            datagramSocket.close();
             
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
    }
 
}

  

 

posted @   呆萌老师  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示