java编程实现基于UDP协议传输数据的方法
作者:awj3584 发布时间:2022-11-14 04:22:22
标签:java,UDP,传输
本文实例讲述了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程序设计有所帮助。
0
投稿
猜你喜欢
- 样式如下所示:布局:layoutdialog_set_pwd.xml<?xml version="." encod
- 上篇文章我们已经可以在 Grafana 上看到对应的 SpringBoot 应用信息了,通过这些信息我们可以对 SpringBoot 应用有
- 背景接上文《失踪人口回归,mybatis-plus 3.3.2 发布》[1] ,提供了一个非常实用的功能 「数据安全保护」 功能,不仅支持数
- 弃用内容先来纠正一个误区。主要之前在版本更新介绍的时候,存在一些表述上的问题。导致部分读者认为这次的更新是Datasource本身初始化的调
- 1、@Select注解基本用法@Select注解的目的是为了取代xml中的select标签,只作用于方法上面。下面看一下@Select注解的
- spring cloud oauth2 feign 遇到的坑关于oauth2相关的内容这里不重复描述,在spring cloud中在管理内部
- 1. Java对象结构Java对象结构包括三部分:对象头、对象体和填充字节,如图所示:对象头又包括三个字段:第一个字段叫作Mark Word
- namespace ConsoleApplication1{ using System; &n
- 一、通过Java代码在setContentView之前执行:requestWindowFeature(Window.FEATURE_NO_T
- 该接口实现了序列化,声明为 public interface Key extends SerializableKey 是所有密钥的顶层接口。
- 本文实例讲述了C#编程读取文档Doc、Docx及Pdf内容的方法。分享给大家供大家参考。具体分析如下:Doc文档:Microsoft Wor
- 本文实例讲述了C#中数组初始化与数组元素复制的方法。分享给大家供大家参考。具体如下:下面的代码演示如何创建和初始化数组,以及C#中如何将数组
- 作为一个初级GIS程序员,关于封装那些宏观的概念暂且不提,编程经常面对的就是“字段,属性,方法”,这也是面向对象的基本概念之一。1.字段通常
- 下面的示例提供对某个已存档类型的基本概述。示例// If compiling from the command line, compile
- 从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用。委托其实就是一种数据类型,和int,string是一样的概念。如果要把一个
- 本文实例为大家分享了spring mvc实现文件上传与下载功能的具体代码,供大家参考,具体内容如下文件上传在pom.xml中引入spring
- 前言博主上个礼拜,已经实现了quarkus的native image应用的上线,经过两天的监控下来,一切运行指标良好,就是内存升到了100M
- 本文以实例形式展示了基于C#实现Windows服务状态启动和停止服务的方法。非常实用。分享给大家供大家参考之用。具体方法如下:首先先引用:S
- 本文实例为大家分享了Unity3D UGUI翻书展示的具体代码,供大家参考,具体内容如下参考大佬的,链接找不到了,找到了再加在这。下边是Sh
- 前言这里主要简单介绍如何使用Camera+SurfaceView自定义相机拍照,如果是Camera2或者是TextureView的可以前往主