J029_UDP通信

一、需求描述

实现UDP的通信

1.1 一发一收

1.1.1 ClientTest1

java 复制代码
package com.itheima.udp;

import java.net.*;

import static java.net.InetAddress.*;

//完成udp通信快速入门,实现一收一发
public class ClientTest1 {
    public static void main(String[] args) throws Exception {
        //创建客户端对象
        DatagramSocket socket = new DatagramSocket();

        //创建数据包对象封装要发出去的数据
        byte[] bytes = "我是快乐的客户端,我负责发送数据".getBytes();

        //4个参数代表:
        //1、要发送的数据
        //2、要发送的数据大小(字节数)
        //3、服务端的IP
        //4、服务端程序的端口号
        DatagramPacket packet = new DatagramPacket(bytes,bytes.length, getLocalHost(),6666);

        //开始发送数据包的数据出去
        socket.send(packet);

        System.out.println("客户端数据发送完毕!!!");

        //发送后关闭通信管道
        socket.close();
    }
}

1.1.2 ServerTest1

java 复制代码
package com.itheima.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ServerTest1  {
    public static void main(String[] args) throws Exception {
        System.out.println("-----服务端启动----------");
        //创建一个服务端对象,用来接收数据。需要注册端口
        DatagramSocket socket = new DatagramSocket(6666);

        //创建一个数据包对象,用于接收数据
        byte[] buffer = new byte[1024 * 64];
        DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

        //开始接受数据
        socket.receive(packet);

        //获取本次数据包接收了多少数据
        int len = packet.getLength();
        String res = new String(buffer,0,len);
        System.out.println(res);

        //获取客户端的IP地址和端口号
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(packet.getPort());

        //释放资源
        socket.close();
    }
}

1.1.3 运行结果

1.2 多发多收

1.2.1 Client

java 复制代码
package com.itheima.udp2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {
        //创建客户端对象
        DatagramSocket socket = new DatagramSocket();

        Scanner sc = new Scanner(System.in);

        while (true){
            //让用户输入要发送的消息
            System.out.println("请说:");
            String msg = sc.nextLine();

            //输入exit时退出
            if ("exit".equals(msg)) {
                System.out.println("欢迎下次光临!退出成功!!!");
                //关闭通道
                socket.close();
                break;
            }

            byte[] bytes = msg.getBytes();
            //创建发送数据的数据包
            DatagramPacket packet = new DatagramPacket(bytes,bytes.length,InetAddress.getLocalHost(),6666);

            //开始发送数据
            socket.send(packet);
        }

        //客户端数据发送完毕
        System.out.println("客户端数据发送完毕");
    }
}

1.2.2 Server

java 复制代码
package com.itheima.udp2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Server  {
    public static void main(String[] args) throws Exception {
        System.out.println("-----服务端启动----------");
        //创建一个服务端对象,用来接收数据。需要注册端口
        DatagramSocket socket = new DatagramSocket(6666);

        //创建一个数据包对象,用于接收数据
        byte[] buffer = new byte[1024 * 64];
        DatagramPacket packet = new DatagramPacket(buffer,buffer.length);

        while (true) {
            //开始接受数据
            socket.receive(packet);

            //获取本次数据包接收了多少数据
            int len = packet.getLength();
            String res = new String(buffer,0,len);
            System.out.println(res);

            //获取客户端的IP地址和端口号
            System.out.println(packet.getAddress().getHostAddress());
            System.out.println(packet.getPort());
            System.out.println("----------------------");
        }
    }
}

1.2.3 运行结果

相关推荐
青草地溪水旁7 小时前
如何理解AP服务发现协议中“如果某项服务需要被配置为可通过多个不同的网络接口进行访问,则应为每个网络接口使用一个独立的客户端服务实例”?
网络·服务发现·客户端实例
门思科技8 小时前
LoRaWAN 的网络拓扑全解析:架构、原理与应用实践
服务器·网络·人工智能·科技·物联网·架构
我的收藏手册8 小时前
Linux 网络命令大全
linux·服务器·网络
焊锡与代码齐飞8 小时前
嵌入式第三十五课!!Linux下的网络编程
linux·运维·服务器·开发语言·网络·学习·算法
2501_927773079 小时前
Linux操作系统编程——网络
linux·运维·网络
奇树谦9 小时前
WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9
网络·windowsapi
武汉誉天10 小时前
学云计算还是网络,选哪个好?
网络·云计算
Johny_Zhao12 小时前
Linux防止rm误操作防护方案
linux·网络·人工智能·网络安全·信息安全·云计算·yum源·系统运维
心一信息12 小时前
如何通过华为无线控制器添加一个名为yunwei的无线网络
运维·网络·华为
废喵喵呜13 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
网络·数据库·tcp/ip