专栏首页日常分享Java UDP的简单实例以及知识点简述

Java UDP的简单实例以及知识点简述

UDP的实现

  Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类

  其与TCP协议实现不同的是:

  UDP的套接字DatagramSocket相比于Socket、ServerSocket来说,是一个非常简单的概念,没有连接的含义。套接字只需要知道侦听和发送数据包的本地端口即可

  也就是在TCP协议中庸Socket类和ServerSocket类进行功能划分,UDP协议中只用一个数据包套接字DatagramSocket发送和接受数据即可。

发送和接收数据、地址和端口都封装在数据包类DatagramPacket中。


DatagramPacket类

  构造函数:

public DatagramPacket(byte[] buf,int length);
/*offset为buf缓冲区的偏移量*/
public DatagramPacket(byte[] buf,int offset,int length);
/*address表示目的地址    port表示目的端口*/
public DatagramPacket(byte[] buf,int offset,int length,InetAdress address, int port)

 常用方法:

/*返回接受数据包的主机IP地址,通常用于获取接受到数据包的发送主机IP*/
public InetAdress    getAdress();
/*返回数据包的主机端口号*/
public int getPort();
/*返回被接收或发送的缓冲区数据*/
public byte[] getData();
/*设置返回发出数据包的主机IP地址*/
public void setAdress(InetAdress iaddr);
/*设置要将此数据包发往远程主机上的端口号*/
public void setPort(int iport);

DatagramSocket类

  对于数据包套接字DatagramSocket来说,它只是发送或接收数据包的端口,不需要考虑链接。因此在客户端和服务器端都需要建立一个DatagramSocket对象,然后通过receive()方法接受数据包,通过send()方法发送数据包。


端口相关对照


UDP网络应用实例

客户端发送1-26数字给服务器端;

服务器端返回对应的A-Z给客户端。

客户端程序:

package web;

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

public class UDPCilent {
    public static void main(String[] args) {
        try {
            /*UDP Cilent SEND*/
            DatagramSocket socket=new DatagramSocket();
            System.out.println("UDP Cilent Start...");
            System.out.println("Enter 1 to 26 ,Server Will Return U A to Z:");
            String info=new Scanner(System.in).next();
            socket.send(new DatagramPacket(info.getBytes(), info.length(),InetAddress.getByName("127.0.0.1"),3000));
            System.out.println("UDP Cilent Send Message...");
            
            
            byte[] rec=new byte[1024];
            DatagramPacket recivepacket=new DatagramPacket(rec, rec.length);
            socket.receive(recivepacket);
            System.out.println("Receive");
            
            String reciveData=new String(recivepacket.getData(),0,recivepacket.getLength());
            System.out.println("Receive from"+recivepacket.getAddress().getHostAddress()+":"+reciveData);
            
            
            socket.close();
            System.out.println("UDP Cilent close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
}

服务端程序

package web;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;

public class UDPServer {
    
    public static void main(String[] args) {
        try {
            
            /*UDP Receive Message*/
            DatagramSocket socket=new DatagramSocket(3000);
            byte []bf=new byte[1024];
            DatagramPacket packet=new DatagramPacket(bf, 1024);
            System.out.println("UDP Server Start... Wait to Receive Message...");
            
            socket.receive(packet);
            String info=new String(packet.getData(),0,packet.getLength())+"from"+packet.getAddress().getHostAddress()+":"+packet.getPort();
            System.out.println(info);
            
            /*feedback*/
            InetAddress address= packet.getAddress();
            int port=packet.getPort();
            String str=new String(packet.getData(),0,packet.getLength());
            int renum=Integer.parseInt(str);
            int feedback='A';
            for(int i=1;i<=26;i++)
            {
                if(renum==i){
                    feedback=feedback+(i-1);
                }
            }
            char back=(char) feedback;
            String fbString=back+"";
            byte[] fstr=fbString.getBytes();
            DatagramPacket feed= new DatagramPacket(fstr,fstr.length,address,port);
            
            socket.send(feed);
            socket.close();
            System.out.println("UDP Server close...");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java TCP通信概念及实例

                  <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。

    Rekent
  • Java 循环队列的实现

      队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空...

    Rekent
  • Java 冒泡排序与快速排序的实现

          (1)基于交换思想的排序算法         (2)从一端开始,逐个比较相邻的两个元素,发现倒序即交换。           (3)一次遍历,一定能...

    Rekent
  • Java 线程池的实现

            任务接口:每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等。 工作线程通过该接口调度任务的执行。

    Rekent
  • Java 通过先序中序序列生成二叉树

      二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证。

    Rekent
  • 栈的Java简单实现

      进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。

    Rekent
  • Java 实现二叉树的构建以及3种遍历方法

    大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下...

    Rekent
  • 使用Solr涡轮增压您的WordPress搜索

    由于无法建议搜索短语,捕捉拼写错误,理解单词变体,组织和过滤结果以及索引搜索结果文档,因此WordPress内置的标准搜索无法为访问者提供最佳搜索体验。全文搜索...

    GongAo啊_
  • 详尽! Win10安装Java8+Tomcat9!

    Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

    SeanDepp

扫码关注云+社区

领取腾讯云代金券