通过udp协议实现简单客户端和服务器

首先我们要清楚:
1.DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类。
2.实现两个客户端通过 UDP协议通信,使用DatagramSocket 和 DatagramPacket类有如下几个步骤,分为客户端和服务端:
客户端

1),实例化DatagramSocket类(带上指定端口),创建客户端

2),准备数据,数据是以字节数组发送的

3),打包数据,使用 DatagramPacket 类 + 服务器地址+ 端口

4),发送数据

5),关闭连接
代码演示:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.*;
public class Client25 {
    public static void main(String[] args) throws IOException {
        //创建服务器(未加端口)
        DatagramSocket udpClientSocket=new DatagramSocket();
        //准备数据
        String message="你好呀";
        byte[] sendBuffer=message.getBytes("UTF-8");
        //getBytes(String charsetName)
        //使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中
        //127.0.0.1
        byte[] serverIP=new byte[4];
        serverIP[0]=127;
        serverIP[1]=0;
        serverIP[2]=0;
        serverIP[3]=1;
        //getByAddress(byte[] addr)根据源ip地址来获取InetAddress对象
        InetAddress serverAddress=InetAddress.getByAddress(serverIP);
        //打包(发送的目的和端口)
        DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,serverAddress,9898);
        //发送资源
        udpClientSocket.send(sendPacket);
        //接收对方回应的消息
        //准备 容器接收
        byte[] receiveBuffer=new byte[1024];
        //封装成包(byte[]   bytes,bytes.lenth)
        DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
        //接收,使用DatagramSocket实例的receive方法接收
        udpClientSocket.receive(receivePacket);
        //用String的构造方法进行转换成字符串
        String responseMessage=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
        System.out.println(responseMessage);
        //关闭资源
        udpClientSocket.close();
    }
}

服务端

1),实例化DatagramSocket类+指定端口

2),准备接收的字节数组,封装 DatagramPacket

3),接受数据

4),解析数据

5),关闭连接
代码演示:

import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Server25 {
    public static void main(String[] args) throws IOException {
        //新建一个DatagramSocket+端口
        DatagramSocket udpServerSocket=new DatagramSocket(9898);
        while(true){
            //准备接收容器
            byte[] receiveBuffer=new byte[1024];
            //封装成包 new DatagramPacket(byte[] b,int length)
            DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
            //等着客户来撩
            udpServerSocket.receive(receivePacket);
            InetAddress clientAddress=receivePacket.getAddress();
            System.out.printf("我从%s:%d收到了消息%n",clientAddress.getHostAddress(),receivePacket.getPort());
            System.out.printf("我一共收到了%d字节的数据%n",receivePacket.getLength());
            //转成字符串
            String message=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
            //服务器端打印收到的字符串
            System.out.println(message);
            //准备容器
            byte[] sendBuffer=message.getBytes("UTF-8");
            //封装成包
            DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,clientAddress,receivePacket.getPort());
            udpServerSocket.send(sendPacket);
        }
    }
}

测试结果:
服务器:在这里插入图片描述客户端:
在这里插入图片描述
至此,通过udp协议实现的简单客户端和服务器就完成了,这里的IP用的是本机,客户端发送信息至本机服务器,服务器将接收到的信息再发送给客户端。.DatagramSocket 和 DatagramPacket 是基于udp协议通信的两个包装类,发送接受数据都要现将数据打包,才能进一步操作。
小结:通过对udp协议的学习,会用udp协议实现简单的客户端和服务端,但是对于类的理解和使用仍然不够熟练,还需要勤加练习,网络协议是学习java非常重要的一部分内容,所以在以后的学习中,对于这部分知识还要多花时间理解和巩固。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值