信息处理接口,定义了信息的关闭,发送,和接收

public interface MessageAction {
void sendMessage();
void receiveMessage();
void close();
}

Udp类实现了MessageAction封装了下面的信息,并提供了相应的get和set方法

private int sendPort;// 要发送数据的端口号端口号
private int localPort;// 本机端口号
InetAddress address = null;// 地址信息
DatagramSocket socket = null;
DatagramPacket receivePacket = null;// 接收用的数据包
DatagramPacket sendPacket = null;// 发送数据包
byte[] bytesToSend = new byte[255];// 要发送的字节数组

构造器如下

public Udp(int sendPort, InetAddress address, DatagramSocket socket,
byte[] bytesToSend) {
super();
this.sendPort = sendPort;
this.address = address;
this.socket = socket;
this.bytesToSend = bytesToSend;
}
public Udp(InetAddress address, DatagramSocket socket, byte[] bytesToSend) {
this.address = address;
this.socket = socket;
this.bytesToSend = bytesToSend;
}
public Udp(int sendPort, int localPort, InetAddress address,
DatagramSocket socket, DatagramPacket receivePacket,
DatagramPacket sendPacket, byte[] bytesToSend) {
super();
this.sendPort = sendPort;
this.localPort = localPort;
this.address = address;
this.socket = socket;
this.receivePacket = receivePacket;
this.sendPacket = sendPacket;
this.bytesToSend = bytesToSend;
}
public Udp() {
}

sendMessage和receiveMessage方法的实现如下

/**
* 发送数据包
*/
@Override
public void sendMessage() {
try {
//初始化发送的数据包
this.sendPacket = new DatagramPacket(this.bytesToSend,
this.bytesToSend.length, address, sendPort);
this.socket.send(sendPacket);//执行发送
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 接收数据包,把接收到的数据放入字节数组buf中,因为一般而言,
* 需要调用getOffset()和getData()方法来访问刚接收到的数据
* 如果直接调用getData()方法,该方法总是返回字节数组的原始大小,忽略了
* 实际数据的内部偏移量和长度信息,所以用到了buf来处理信息
*/
@Override
public void receiveMessage() {
try {
//初始化接收的数据包
this.receivePacket = new DatagramPacket(
new byte[this.bytesToSend.length], this.bytesToSend.length);
this.socket.receive(receivePacket);
//把接收到的数据放入字节数组buf中,因为一般而言,需要调用getOffset()和getData()方法来访问刚接收到的数据
byte[] buf = new byte[receivePacket.getLength()];
System.arraycopy(receivePacket.getData(),
receivePacket.getOffset(), buf, 0, buf.length);
String message = new String(buf);//用字节数组创造相应的字符串
System.out.println(message);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void close() {
this.socket.close();
}

下面是Udp的具体的子类UdpClient和UdpServer的具体的实现

public class UdpClient extends Udp {
public UdpClient() {
super();
// TODO Auto-generated constructor stub
}
public UdpClient(InetAddress address, DatagramSocket socket,
byte[] bytesToSend) {
super(address, socket, bytesToSend);
// TODO Auto-generated constructor stub
}
public UdpClient(int sendPort, InetAddress address, DatagramSocket socket,
byte[] bytesToSend) {
super(sendPort, address, socket, bytesToSend);
// TODO Auto-generated constructor stub
}
public UdpClient(int sendPort, int localPort, InetAddress address,
DatagramSocket socket, DatagramPacket receivePacket,
DatagramPacket sendPacket, byte[] bytesToSend) {
super(sendPort, localPort, address, socket, receivePacket, sendPacket,
bytesToSend);
// TODO Auto-generated constructor stub
}
public static void main(String args[]) throws UnknownHostException, SocketException {
Udp us = new UdpClient(InetAddress.getLocalHost(),
new DatagramSocket(8889), "我是客户端".getBytes());
us.setSendPort(8888);//设置要发送的端口号
us.sendMessage();
us.receiveMessage();
//      us.close();
}
}

UdpServer

public class UdpServer extends Udp {
public static void main(String args[]) throws UnknownHostException, SocketException {
Udp us = new UdpServer(InetAddress.getLocalHost(),
new DatagramSocket(8888), "我是服务端".getBytes());
us.receiveMessage();//接收客户端的信息
us.setSendPort(8889);//设置要发送的端口号
us.sendMessage();
//us.close();
}
public UdpServer(InetAddress address, DatagramSocket socket,
byte[] bytesToSend) {
super(address, socket, bytesToSend);
// TODO Auto-generated constructor stub
}
public UdpServer() {
super();
// TODO Auto-generated constructor stub
}
public UdpServer(int port, InetAddress address, DatagramSocket socket,
byte[] bytesToSend) {
super(port, address, socket, bytesToSend);
// TODO Auto-generated constructor stub
}
}

在myeclipse里先运行UdpServer在运行UdpClient,检查程序结果便可

UDP通信的简单实现(程序)相关推荐

  1. Qt中UDP通信的简单示例

    udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...

  2. java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP...

    无连接通信 UDP 客户端 package com.swift.test;import java.io.IOException; import java.net.DatagramPacket; imp ...

  3. Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  4. UDP通信——使用python实现简单的UDP通信

    UDP通信--使用python实现简单的UDP通信 UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一 ...

  5. Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)

    目录 1 网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4 InetAddress的使用 1.5 端口 1.6 协议 2 UDP通信程序 2.1 UDP通信原理 2 ...

  6. java udp 服务器方_Java的UDP通信的小程序,UDP服务器

    我一直工作在不同的方式来满2编码天做到这一点,我需要一些帮助:Java的UDP通信的小程序,UDP服务器 我想在网上创建Java中的多人游戏.要做到这一点,我需要服务器和小应用程序之间的通信 我的印象 ...

  7. qt 实现UDP通信简单案例

    实现效果 实现功能 创建两个界面,可以通过udp进行通信,并显示通信内容. 界面部分由代码实现,并使用qss简单美化. udp通信由创建套接字,绑定端口号,发送和接收数据函数完成. 代码实现 创建第一 ...

  8. 微信小程序UDP通信

    微信小程序UDP通信及编码转换 import Encoder from '../../util/Encoder.js' onLoad() {this.udp = wx.createUDPSocket( ...

  9. 8266模块和微信小程序进行UDP通信

    记录一下微信小程序接入esp8266过程中的一些问题 太久没写了,你知道时间是遗忘一个人最好的东西,请记得我一直在 微信小程序接入vant 会不会有人问为什么引入vant?不会,好那不讲了,直接讲引入 ...

  10. java UDP通信程序DatagramSocket数据发送

    首先 我们先来了解一下 UDP 首先 他是一种不可靠的网络协议 他在通信的两端 各建立一个 Socke对象 但是他们只是 发送和接收数据的对象 发送端只管发送 不会顾及接收端是否接到 接收到只负责接收 ...

最新文章

  1. C语言读取bmp图像并做简单显示
  2. mysql dba系统学习(21)mysql存储引擎InnoDB
  3. win10开启telnet客户端
  4. 车位预定查询html格式,停车场车位预定方法
  5. MFC Radio Button 使用 分组 RadioButton 用法
  6. 【ECharts系列|01入门】 从入门到天黑【入门级教程实战】
  7. 中邮智递通过数加和datav将系统和服务迁移到大数据平台
  8. Spring精华问答 | Spring Bean的自动装配是怎么回事?
  9. python3的输出函数_教女朋友学Python3(二)简单的输入输出及内置函数查看 原创...
  10. Python花式编程:多层嵌套列表扁平化
  11. easyui之treegrid的生成
  12. POJ1029 UVA158 Calendar题解
  13. WPE实际经验和实例
  14. MVpArms集成框架快速开发
  15. 微信朋友圈html5广告,微信朋友圈原生广告页是什么
  16. Lint 静态代码检查工具
  17. lbj学习日记 06 一维数组和二维数组刷题课
  18. python 线性相关 与 线性拟合
  19. 反转字符串中的元音字母Python解法
  20. HCIP—223难题精析

热门文章

  1. java8 metaspacesize_java-8 – Java8 MetaspaceSize标志不起作用
  2. Django:查询结果新增一列、查询结果字段名称更改、多个字段模糊查询
  3. SQL:pgSQL截取查询结果
  4. c语言删除功能,程序的删除功能有问题,不知怎么改
  5. SLAM基础_从零开始一起学习SLAM | 为啥需要李群与李代数?
  6. Cesium 环境配置笔记(使用node.js 或者WampServer服务器)
  7. opencv数字图像处理(2) - 直方图处理方法【直方图均衡化与直方图规定化】
  8. Axis2在eclipse和tomcat下的配置
  9. 端侧机器学习框架 Tensorlfow Lite
  10. WebLogic 11g重置用户密码