java Socket UDP实例详解

发布时间 - 2026-01-10 22:49:59    点击率:

UDP编程示例

服务器端:

package socket; 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
 
public class UDPServer { 
 
   
  public static void main(String[] args) throws IOException { 
    byte[] buf = new byte[1024]; 
    DatagramPacket dp = new DatagramPacket(buf, buf.length);//声明一个用来接收数据的“包裹” 
    DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口 
    while(true){ 
      ds.receive(dp); //阻塞式的 
      System.out.println(new String(buf,0,dp.getLength()));//dp中获取的数据的长度 
    } 
 
  } 
 
} 

客户端:

package socket; 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetSocketAddress; 
import java.net.SocketException; 
 
public class UDPClient { 
 
  public static void main(String[] args) throws IOException { 
    byte[] buf = new String("Hello").getBytes(); 
    //UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port 
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); 
    DatagramSocket ds = new DatagramSocket(9999); //指明发送端的端口号 
    ds.send(dp); 
    ds.close(); 
  } 
 
} 

说明:

1. 严格意义上来讲,UDP没有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。

2. UDP和TCP的端口是分开的,例如UDP有一个端口号为5678的端口,TCP也有一个端口号为5678的端口。

3. UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port。

4. 如果要发送long、int等类型的数据,则需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流类型,如下:

服务器端:

package socket; 
 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
 
public class UDPServer { 
 
   
  public static void main(String[] args) throws IOException { 
    byte[] buf = new byte[1024]; 
    DatagramPacket dp = new DatagramPacket(buf, buf.length); 
    DatagramSocket ds = new DatagramSocket(5678); 
    ByteArrayInputStream bais = null; 
    DataInputStream dos = null; 
    while(true){ 
      ds.receive(dp);  
      bais = new ByteArrayInputStream(buf); 
      dos = new DataInputStream(bais); 
      System.out.println(dos.readLong()); 
    } 
 
  } 
 
} 

客户端:

package socket; 
 
import java.io.ByteArrayOutputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetSocketAddress; 
import java.net.SocketException; 
 
public class UDPClient { 
 
  public static void main(String[] args) throws IOException { 
    byte[] buf = null; 
    long l = 100000L; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    DataOutputStream dos = new DataOutputStream(baos); 
    dos.writeLong(l); 
    buf = baos.toByteArray(); 
    DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678)); 
    DatagramSocket ds = new DatagramSocket(9999);  
    ds.send(dp); 
    ds.close(); 


        dos.close(); 
  } 
 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # Socket  # UDP  # UDP详细介绍  # UDP实例代码  # java实现TCP socket和UDP socket的实例  # java实现基于UDP协议网络Socket编程(C/S通信)  # Java Socket编程实例(五)- NIO UDP实践  # Java Socket编程实例(二)- UDP基本使用  # Java基于socket服务实现UDP协议的方法  # Java Socket实现UDP编程浅析  # 端口号  # 要在  # 发送到  # 的是  # 客户端  # 也有  # 中有  # 希望能  # 不像  # 另外一个  # 谢谢大家  # 之分  # 要使  # 有一个  # 则需  # 意义上  # String  # args  # main  # true 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何实现建站之星域名转发设置?  青岛网站建设如何选择本地服务器?  如何快速搭建高效WAP手机网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何快速完成中国万网建站详细流程?  Laravel怎么实现模型属性的自动加密  个人网站制作流程图片大全,个人网站如何注销?  如何用PHP快速搭建高效网站?分步指南  原生JS获取元素集合的子元素宽度实例  如何用免费手机建站系统零基础打造专业网站?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  如何自定义建站之星网站的导航菜单样式?  Laravel怎么在Blade中安全地输出原始HTML内容  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  IOS倒计时设置UIButton标题title的抖动问题  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何实现API资源集合?(Resource Collection教程)  浅谈javascript alert和confirm的美化  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  javascript基本数据类型及类型检测常用方法小结  Swift开发中switch语句值绑定模式  如何快速查询网址的建站时间与历史轨迹?  Android GridView 滑动条设置一直显示状态(推荐)  如何快速搭建高效服务器建站系统?  网站制作壁纸教程视频,电脑壁纸网站?  java ZXing生成二维码及条码实例分享  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何在建站宝盒中设置产品搜索功能?  如何在云主机上快速搭建多站点网站?  中国移动官方网站首页入口 中国移动官网网页登录  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  JS去除重复并统计数量的实现方法  微信小程序制作网站有哪些,微信小程序需要做网站吗?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?