热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java编程实现基于UDP协议传输数据的方法

这篇文章主要介绍了java编程实现基于UDP协议传输数据的方法,较为详细的分析了UDP协议的原理及Java编程实现数据传输客户端与服务器端的相关技巧,需要的朋友可以参考下

本文实例讲述了java编程实现基于UDP协议传输数据的方法。分享给大家供大家参考,具体如下:

UDP协议(User Datagram Protocol,用户数据报协议)不同于TCP协议,它是不可能靠的,但是它比TCP协议具有更快的传输速度,UDP发送的数据单元称为数据报,当网络传输UDP传输UDP数据报是无法保证数据能够到达目的地,也无法保证按发送的顺序到达目的地,也就是说先发送了“hello”,再发送了“world”,但接收方可能会先收到“world”,再收到“hello”,也有可能收不到数据,为什么呢?因为它是不可能靠的,在传输途中可能丢失了。但UDP比TCP跟适合与传输实时音频。下面是一个简单的UPD传输数据报的例子

服务器端:

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.SocketException; 
public class EchoServer { 
 private DatagramSocket datagramSocket; 
 private final int port = 8088; 
 public static void main(String[] args) throws SocketException { 
  new EchoServer().service(); 
 } 
 public EchoServer() throws SocketException{ 
  datagramSocket = new DatagramSocket(port); 
  System.out.println("服务器启动"); 
 } 
 public String echo(String msg){ 
  return "echo:"+msg; 
 } 
 public void service(){ 
  while (true) { 
   try { 
    DatagramPacket packet = new DatagramPacket(new byte[512], 512); 
    datagramSocket.receive(packet); 
    String msg = new String(packet.getData(), 0, packet.getLength()); 
    System.out.println(packet.getAddress()+"/"+packet.getPort()+" msg:"+msg); 
    packet.setData(echo(msg).getBytes()); 
    datagramSocket.send(packet); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
  } 
 } 
}

客户端:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.SocketException; 
public class EchoClient { 
 private String remoteHost="localhost"; 
 private int remotePort=8088; 
 private DatagramSocket datagramSocket; 
 public EchoClient() throws SocketException{ 
  datagramSocket = new DatagramSocket(); 
 } 
 public static void main(String[] args) throws SocketException { 
  new EchoClient().talk(); 
 } 
 public void talk(){ 
  try { 
   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
   String msg = null; 
   InetAddress address = InetAddress.getByName(remoteHost); 
   while ((msg=reader.readLine())!=null) { 
    //发送数据报 
    byte [] buffer = msg.getBytes(); 
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length, address, remotePort); 
    datagramSocket.send(packet); 
    //接收数据报 
    DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512); 
    datagramSocket.receive(inputPacket); 
    System.out.println(new String(inputPacket.getData(), 0 , inputPacket.getLength())); 
    if("bye".equals(msg)){ 
     break; 
    } 
   } 
  } catch (IOException e) { 
   e.printStackTrace(); 
  }finally{ 
   datagramSocket.close(); 
  } 
}

希望本文所述对大家Java程序设计有所帮助。


推荐阅读
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • NTP服务器配置详解:原理与工作模式
    本文深入探讨了网络时间协议(NTP)的工作原理及其多种工作模式,旨在帮助读者全面理解NTP的配置参数和应用场景。NTP是基于RFC 1305的时间同步标准,广泛应用于分布式系统中,确保设备间时钟的一致性。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
  • 本文深入探讨了MAC地址与IP地址绑定策略在网络安全中的应用及其潜在风险,同时提供了针对该策略的破解方法和相应的防御措施。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 三菱PLC SLMP协议报文详解
    本文详细解析了三菱PLC中使用的SLMP协议报文结构,包括其工作原理、通信流程及报文格式,旨在帮助工程师和技术人员更好地理解和运用这一协议。 ... [详细]
  • 使用C# .NET构建UDP点对点聊天应用
    本文详细介绍如何利用C# .NET框架开发一个基于UDP协议的点对点聊天程序,包括客户端与服务器之间的连接建立、数据传输等核心功能。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
author-avatar
Eva绫波_772
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有