当前位置: 首页 > news >正文

UDP-如何实现客户端与服务器端的通信(一对一、一对多、多对一、多对多之间的通信)

        Java中提供了DatagramSocket来实现这个功能

1.服务器端的程序
  • 创建Socket,监听6666端口
  • 读取来自客户端的“数据包”,创建数据包(通过DatagramPacket实现数据包的创建)
  • 接收数据包
  • 从数据包中,读取数据(通过recieve()接收数据send()发送给数据)

代码如下:

package com.ztt.udp.Demo01;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) {//创建Socket,监听6666端口try (DatagramSocket serverSocket = new DatagramSocket(6666)) {//读取来自客户端的数据包//创建数据包byte[] buff=new byte[1024];DatagramPacket packet=new DatagramPacket(buff,buff.length);//接收数据包serverSocket.receive(packet);System.out.println("读取完毕!");//从数据包中,读取数据byte[] data=packet.getData();String strFormClient=new String(data);System.out.println("来自客户端的信息:"+strFormClient);if("天王盖地虎".equals(strFormClient)) {packet.setData("宝塔镇河妖".getBytes());}else {packet.setData("哈哈哈哈哈哈哈".getBytes());}//反馈信息给客户端(发送数据包至客户端)serverSocket.send(packet);} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
2.客户端的程序 
  • 创建socket
  • 连接指定主机的端口(客户端使用clientSocket.connect()指定远程地址和端口)
  • 创建数据包
  • 发送数据包(通过recieve()接收数据send()发送给数据)

代码如下:

package com.ztt.udp.Demo01;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class UdpClient {public static void main(String[] args) {//创建sockettry (DatagramSocket clientSocket = new DatagramSocket()) {//连接指定主机的端口clientSocket.connect(InetAddress.getByName("192.168.199.112"),6666);//创建数据包DatagramPacket packet=new DatagramPacket(new byte[1024],1024);packet.setData("甜甜是甜甜".getBytes());//将数据放入数据包//发送数据包clientSocket.send(packet);//等待接受反馈信息(等待接收来自服务端的数据包)clientSocket.receive(packet);byte[] data=packet.getData();String strFormClient=new String(data);System.out.println("来自服务端的信息:"+strFormClient);} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

总结:

  1. 使用UDP协议通信时,服务器和客户端双方无需建立连接;
  2. 服务器端用DatagramSocket(port)监听端口;
  3. 客户端使用DatagramSocket.connect()指定远程地址和端口;
  4. 双方通过receive()和send()读写数据;
  5. DatagramSocket没有IO流接口,数据被直接写入byte[]缓冲区;

 

http://www.lryc.cn/news/403169.html

相关文章:

  • C++那些事之依赖注入
  • 克隆的TrinityCore服务器网速慢卡顿问题的解决(未解决)
  • 独立站外链如何影响搜索引擎排名?
  • java设计模式:03-04-装饰器模式
  • 通过splunk web服务将服务器上文件下载到本地
  • Node.js 路由
  • Adobe国际认证详解-网页设计认证专家行业应用场景解析
  • ESC(ELectronic Stability Control,电子稳定控制系统)
  • 减分兔搜题-12123学法减分20题目及答案 #媒体#职场发展
  • java用freemarker导出word
  • CH01_WPF概述
  • 秒懂设计模式--学习笔记(11)【结构型-享元模式】
  • Python爬虫——1爬虫基础(一步一步慢慢来)
  • 【js自学打卡9】抛出异常 / 幂计算 / 发布订阅 / map小知识点
  • ArcGIS Pro SDK (九)几何 7 多点
  • 服务器注意事项
  • 学生信息管理系统设计
  • Python求均值,方差,标准差
  • DDei在线设计器-HTML渲染
  • 【React Hooks原理 - useSyncExternalStore】
  • C++STL初阶(7):list的运用与初步了解
  • el-menu弹出菜单样式不生效
  • Springboot 3.x - Reactive programming (2)
  • WPF+Mvvm 项目入门完整教程(一)
  • [解决方法]git上传的项目markdown文件的图片无法显示
  • 【React】使用 antd 加载组件实现 iframe 的加载效果
  • Python爬虫(1) --基础知识
  • 云原生系列 - Jenkins
  • django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出
  • 计算机网络入门 -- 常用网络协议