UDP通信的简单实现(程序)
信息处理接口,定义了信息的关闭,发送,和接收
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通信的简单实现(程序)相关推荐
- Qt中UDP通信的简单示例
udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...
- java基础 UDP通信 user datagram protocol 用户数据豆协议 TCP transmission control protocol 传输控制协议 多线程TCP...
无连接通信 UDP 客户端 package com.swift.test;import java.io.IOException; import java.net.DatagramPacket; imp ...
- Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】
视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...
- UDP通信——使用python实现简单的UDP通信
UDP通信--使用python实现简单的UDP通信 UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一 ...
- Java核心类库之(网络编程:网络编程入门、UDP通信程序、TCP通信程序)
目录 1 网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 1.4 InetAddress的使用 1.5 端口 1.6 协议 2 UDP通信程序 2.1 UDP通信原理 2 ...
- java udp 服务器方_Java的UDP通信的小程序,UDP服务器
我一直工作在不同的方式来满2编码天做到这一点,我需要一些帮助:Java的UDP通信的小程序,UDP服务器 我想在网上创建Java中的多人游戏.要做到这一点,我需要服务器和小应用程序之间的通信 我的印象 ...
- qt 实现UDP通信简单案例
实现效果 实现功能 创建两个界面,可以通过udp进行通信,并显示通信内容. 界面部分由代码实现,并使用qss简单美化. udp通信由创建套接字,绑定端口号,发送和接收数据函数完成. 代码实现 创建第一 ...
- 微信小程序UDP通信
微信小程序UDP通信及编码转换 import Encoder from '../../util/Encoder.js' onLoad() {this.udp = wx.createUDPSocket( ...
- 8266模块和微信小程序进行UDP通信
记录一下微信小程序接入esp8266过程中的一些问题 太久没写了,你知道时间是遗忘一个人最好的东西,请记得我一直在 微信小程序接入vant 会不会有人问为什么引入vant?不会,好那不讲了,直接讲引入 ...
- java UDP通信程序DatagramSocket数据发送
首先 我们先来了解一下 UDP 首先 他是一种不可靠的网络协议 他在通信的两端 各建立一个 Socke对象 但是他们只是 发送和接收数据的对象 发送端只管发送 不会顾及接收端是否接到 接收到只负责接收 ...
最新文章
- C语言读取bmp图像并做简单显示
- mysql dba系统学习(21)mysql存储引擎InnoDB
- win10开启telnet客户端
- 车位预定查询html格式,停车场车位预定方法
- MFC Radio Button 使用 分组 RadioButton 用法
- 【ECharts系列|01入门】 从入门到天黑【入门级教程实战】
- 中邮智递通过数加和datav将系统和服务迁移到大数据平台
- Spring精华问答 | Spring Bean的自动装配是怎么回事?
- python3的输出函数_教女朋友学Python3(二)简单的输入输出及内置函数查看
原创...
- Python花式编程:多层嵌套列表扁平化
- easyui之treegrid的生成
- POJ1029 UVA158 Calendar题解
- WPE实际经验和实例
- MVpArms集成框架快速开发
- 微信朋友圈html5广告,微信朋友圈原生广告页是什么
- Lint 静态代码检查工具
- lbj学习日记 06 一维数组和二维数组刷题课
- python 线性相关 与 线性拟合
- 反转字符串中的元音字母Python解法
- HCIP—223难题精析
热门文章
- java8 metaspacesize_java-8 – Java8 MetaspaceSize标志不起作用
- Django:查询结果新增一列、查询结果字段名称更改、多个字段模糊查询
- SQL:pgSQL截取查询结果
- c语言删除功能,程序的删除功能有问题,不知怎么改
- SLAM基础_从零开始一起学习SLAM | 为啥需要李群与李代数?
- Cesium 环境配置笔记(使用node.js 或者WampServer服务器)
- opencv数字图像处理(2) - 直方图处理方法【直方图均衡化与直方图规定化】
- Axis2在eclipse和tomcat下的配置
- 端侧机器学习框架 Tensorlfow Lite
- WebLogic 11g重置用户密码