• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java实现基于UDP协议网络Socket编程(C/S通信)

java 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

一、前言:认识UDP

UDP,全称User Datagram Protocol(用户数据报协议),是Internet 协议集支持一个无连接的传输协议。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向报文的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口,适用端口分别运行在同一台设备上的多个应用程序。

二、UDP的特点(与TCP相比)

正是UDP提供不可靠服务,具有了TCP所没有的优势。无连接使得它具有资源消耗小,处理速度快的优点,所以音频、视频和普通数据在传送时经常使用UDP,偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

UDP有别于TCP,有自己独立的套接字(IP+Port),它们的端口号不冲突。和TCP编程相比,UDP在使用前不需要进行连接,没有流的概念。

如果说TCP协议通信与电话通信类似,那么UDP通信就与邮件通信类似:不需要实时连接,只需要目的地址;

UDP通信前不需要建立连接,只要知道地址(ip地址和端口号)就可以给对方发送信息;

基于用户数据报文(包)读写;

UDP通信一般用于线路质量好的环境,如局域网内,如果是互联网,往往应用于对数据完整性不是过于苛刻的场合,例如语音传送等。

以上是对UDP的基本认识,与以前学习的理论相比,接下来的实践更加有趣,实践出真知。

三、UDP网络Socket编程(Java实现)

首先,熟悉java中UDP编程的几个关键类:DatagramSocket(套接字类),DatagramPacket(数据报类),MulticastSocket。本篇主要使用前两个。

1、创建客户端

第一步,实例化一个数据报套接字,用于与服务器端进行通信。与TCP不同,UDP中只有DatagramSocket一种套接字,不区分服务端和客户端,创建的时候并不需要指定目的地址,这也是TCP协议和UDP协议最大的不同点之一。

public UDPClient(String remoteIP,String remotePort) throws IOException{
    this.remoteIP=InetAddress.getByName(remoteIP);
    this.remotePort=Integer.parseInt(remotePort);
    //创建UDP套接字,系统随机选定一个未使用的UDP端口绑定
    socket=new DatagramSocket();
}

第二步, 创建UDP数据报,实现发送和接收数据的方法。UDP发送数据是基于报文DatagramPacket,网络中传递的UDP数据都要封装在这种自包含的报文中。

实现DatagramPacket发送数据的方法:

//定义一个数据的发送方法
public void send(String msg){
  try {
    //将待发送的字符串转为字节数组
    byte[] outData=msg.getBytes("utf-8");
    //构建用于发送的数据报文,构造方法中<div>本文来源gaodai.ma#com搞##代!^码7网</div>传入远程通信方(服务器)的ip地址和端口
    DatagramPacket outPacket=new DatagramPacket(outData,outData.length,remoteIP,remotePort);
    //给UDP发送数据报
    socket.send(outPacket);
  }catch (IOException e){
      e.printStackTrace();
   }
}

 DatagramPacket接收数据的方法:

//定义一个数据的发送方法
public void send(String msg){
  try {
    //将待发送的字符串转为字节数组
    byte[] outData=msg.getBytes("utf-8");
    //构建用于发送的数据报文,构造方法中传入远程通信方(服务器)的ip地址和端口
    DatagramPacket outPacket=new DatagramPacket(outData,outData.length,remoteIP,remotePort);
    //给UDP发送数据报
    socket.send(outPacket);
  }catch (IOException e){
      e.printStackTrace();
   }
}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java实现基于UDP协议网络Socket编程(C/S通信)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址