一:UDP服务器端
package socketServer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/***
* UDP 协议传输数据(服务器)
**/
public class UdpServer {
public static final int PORT = 30001;
// 定义每个数据报的最大大小为4K
public static final int DATA_LEN = 4096;
// 定义该服务器使用的DatagramSocket
private DatagramSocket socket = null;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组组建准备接受数据的DatagramPacket对象
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
// 定义一个用于发送的DatagramPacket
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器发送该数组的元素
String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典",
"Struts2权威指南", "ROR敏捷开发最佳实践" };
public void init() throws IOException {
try {
// 创建DatagramSocket 对象
socket = new DatagramSocket(PORT);
for (int i = 0; i < 1000; i++) {
// 读取Socket中的数据,读到的数据放在inPacket 所封装的字节数组里
socket.receive(inPacket);
// 判断inPacket.getData()和inBuff是否是同一个数组
System.out.println("---判断inPacket.getData()和inBuff是否是同一个数组 -----------" + inBuff == inPacket
.getData() + "--------------");
// 将接收到的内容转成字符串后输出
System.out.println("服务器端显示客户端输入的内容:"+new String(inBuff, 0, inPacket.getLength()));
// 从字符串数组中取出一个元素作为发送数据
byte[] sendData = books[i % 4].getBytes();
// 以指定字节数组作为发送数据,以刚接受到的DatagramPacket的源SocketAddress作为目标SocketAddress
// 创建DatagramPacket
outPacket = new DatagramPacket(sendData, sendData.length,
inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
} catch (SocketException e) {
e.printStackTrace();
} finally {
if (socket != null) {
socket.close();
}
}
}
public static void main(String[] args) throws IOException {
new UdpServer().init();
}
}
二:UDP客户端
package socketClient;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
public class UdpClient {
/**
* UDP 协议传输数据(客户端)
*/
//定义发送数据报的目的地
public static final int DEST_PORT=30001;
public static final String DEST_IP="127.0.0.1";
private static final int DATA_LEN=4096;
//定义该客户端使用的DatagramSocket
private DatagramSocket socket=null;
//定义接收网络数据的字节数据
byte[] inBuff=new byte[DATA_LEN];
//以指定字节数组准备接受数据的DatagramPacket对象
private DatagramPacket inPacket=new DatagramPacket(inBuff,inBuff.length);
private DatagramPacket outPacket=null;
public void init() throws IOException{
try {
//使用随机端口
socket=new DatagramSocket();
//初始化发送用的DatagramPacket
outPacket=new DatagramPacket(new byte[0], 0,InetAddress.getByName(DEST_IP),DEST_PORT);
//键盘输入流
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
//将输入的一行字符串转换为字节数组
byte[] buff=scan.nextLine().getBytes();
//填充发送用的数据
outPacket.setData(buff);
// 发送数据报
socket.send(outPacket);
//读取socket中的数据,读到的数据放在inPacket所封装的字节数据里面
socket.receive(inPacket);
System.out.println("-------服务器返回的数据:"+new String(inBuff,0,inPacket.getLength())+"------");
}
} catch (SocketException e) {
e.printStackTrace();
}finally{
if(socket!=null){
socket.close();
}
}
}
public static void main(String[] args) throws IOException {
new UdpClient().init();
}
}
package socketServer;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/***
* UDP 协议传输数据(服务器)
**/
public class UdpServer {
public static final int PORT = 30001;
// 定义每个数据报的最大大小为4K
public static final int DATA_LEN = 4096;
// 定义该服务器使用的DatagramSocket
private DatagramSocket socket = null;
// 定义接收网络数据的字节数组
byte[] inBuff = new byte[DATA_LEN];
// 以指定字节数组组建准备接受数据的DatagramPacket对象
private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);
// 定义一个用于发送的DatagramPacket
private DatagramPacket outPacket;
// 定义一个字符串数组,服务器发送该数组的元素
String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典",
"Struts2权威指南", "ROR敏捷开发最佳实践" };
public void init() throws IOException {
try {
// 创建DatagramSocket 对象
socket = new DatagramSocket(PORT);
for (int i = 0; i < 1000; i++) {
// 读取Socket中的数据,读到的数据放在inPacket 所封装的字节数组里
socket.receive(inPacket);
// 判断inPacket.getData()和inBuff是否是同一个数组
System.out.println("---判断inPacket.getData()和inBuff是否是同一个数组 -----------" + inBuff == inPacket
.getData() + "--------------");
// 将接收到的内容转成字符串后输出
System.out.println("服务器端显示客户端输入的内容:"+new String(inBuff, 0, inPacket.getLength()));
// 从字符串数组中取出一个元素作为发送数据
byte[] sendData = books[i % 4].getBytes();
// 以指定字节数组作为发送数据,以刚接受到的DatagramPacket的源SocketAddress作为目标SocketAddress
// 创建DatagramPacket
outPacket = new DatagramPacket(sendData, sendData.length,
inPacket.getSocketAddress());
// 发送数据
socket.send(outPacket);
}
} catch (SocketException e) {
e.printStackTrace();
} finally {
if (socket != null) {
socket.close();
}
}
}
public static void main(String[] args) throws IOException {
new UdpServer().init();
}
}
二:UDP客户端
package socketClient;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
public class UdpClient {
/**
* UDP 协议传输数据(客户端)
*/
//定义发送数据报的目的地
public static final int DEST_PORT=30001;
public static final String DEST_IP="127.0.0.1";
private static final int DATA_LEN=4096;
//定义该客户端使用的DatagramSocket
private DatagramSocket socket=null;
//定义接收网络数据的字节数据
byte[] inBuff=new byte[DATA_LEN];
//以指定字节数组准备接受数据的DatagramPacket对象
private DatagramPacket inPacket=new DatagramPacket(inBuff,inBuff.length);
private DatagramPacket outPacket=null;
public void init() throws IOException{
try {
//使用随机端口
socket=new DatagramSocket();
//初始化发送用的DatagramPacket
outPacket=new DatagramPacket(new byte[0], 0,InetAddress.getByName(DEST_IP),DEST_PORT);
//键盘输入流
Scanner scan=new Scanner(System.in);
while(scan.hasNextLine()){
//将输入的一行字符串转换为字节数组
byte[] buff=scan.nextLine().getBytes();
//填充发送用的数据
outPacket.setData(buff);
// 发送数据报
socket.send(outPacket);
//读取socket中的数据,读到的数据放在inPacket所封装的字节数据里面
socket.receive(inPacket);
System.out.println("-------服务器返回的数据:"+new String(inBuff,0,inPacket.getLength())+"------");
}
} catch (SocketException e) {
e.printStackTrace();
}finally{
if(socket!=null){
socket.close();
}
}
}
public static void main(String[] args) throws IOException {
new UdpClient().init();
}
}
发表评论
-
Java 模拟Interceptor 过程
2015-09-29 16:25 709Java,用普通类 模拟Interceptor 过程 -
java 关闭其他应用程序或重启机器
2014-06-12 08:49 1473public static Process performCo ... -
mybatis in action
2014-02-25 15:01 1450mybatis实战教程(mybatis in action) ... -
java 创建文件夹和文件
2014-01-06 13:22 1025一:判断文件夹是否存在,不存在则创建 String fileP ... -
spring 发送邮件
2013-09-25 16:12 769Spring mail 发送邮件 一:添加mail jar 包 ... -
Spring 定时器 quartz
2013-09-22 15:36 932spring quartz 定时执行任务(SSH) 配置文件: ... -
java 读取硬件信息
2013-09-05 15:33 1100java 读取计算机信息: 机器名、CPU、内存使用率、IP ... -
java 连接sqlite数据库
2013-09-04 17:22 1405一:首先 添加jar包 二: import java.sql. ... -
java 打包jar 成exe 并动态绑定jre
2013-09-04 17:13 1181转: http://www.doc88.com/p-18569 ... -
Java extends 多态
2013-06-21 16:30 964class A { public int i = 1; ... -
Java GUI(图形用户界面) 布局管理器
2013-04-16 17:03 1142java 图形用户界面布局管理器 -
MyEclipse发布Java应用程序
2013-03-29 11:48 8731、首先:我们使用MyEclipse导出Java应用程序的Ja ... -
S2SH:struts2获取前台数据的三种方式
2013-02-02 09:38 2203struts2 获取前台数据的 ... -
MyEclipse 配置Tomcat 服务器
2013-01-31 14:11 1102一:首先安装JDK和Tomcat 二:打开MyEclipse, ... -
Hibernate 动态添加数据库(数据库信息不固定)
2012-11-03 09:56 1437上篇文章利用spring来连接多个数据库并进行切换数据源, ... -
SSH 连接多个数据库并且动态切换
2012-11-03 09:35 3392在项目中,有时遇到连接多个数据库的情况,并且根据用户的操 ... -
JavaEE Hibernate 分页查询 语句
2012-06-28 11:01 1583//计算总记录数 public int getTotalRo ...
相关推荐
总的来说,基于UDP协议的Socket编程利用`DatagramPacket`和`DatagramSocket`类,能够在Java中实现高效且无连接的网络通信。这种通信方式适用于对延迟敏感、不需要数据顺序保证的场景,但也意味着开发者需要自行处理...
UDP编程中,可能会遇到如网络中断、地址解析失败等问题,需要适当地捕获和处理异常,如`IOException`。 9. 实战应用: 在实际项目中,基于UDP的网络编程可用于实现聊天应用、实时游戏、数据采集系统等。例如,一...
UDP则是一种无连接的、不可靠的、基于数据报的传输协议。它不保证数据的顺序或完整性,也不进行错误检测和重传,因此UDP具有更高的传输效率,但同时也可能导致数据丢失。UDP适用于对实时性要求高的应用,如在线视频...
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而UDP(User Datagram Protocol)作为传输层协议之一,因其轻量级、高效的特点,在实时通信、流媒体、在线游戏等领域广泛应用。本篇主要探讨Java环境下如何...
Java基于UDP协议的聊天程序是一种实现网络通信的应用实例,它利用了无连接的用户数据报协议(User Datagram Protocol,简称UDP)进行数据传输。在这个完整版的程序中,开发者已经完成了从设计到调试的全部过程,使其...
通常,PING基于ICMP(Internet Control Message Protocol)协议,但在这个特定的课程设计中,我们将关注如何使用UDP(User Datagram Protocol)来实现类似的机制。下面将详细解释基于UDP的PING实现以及相关的Java...
在Java中,我们使用`java.net.DatagramSocket`类来创建一个UDP套接字,然后用`DatagramPacket`封装要发送的数据和目标地址。例如,我们可能先创建一个`DatagramSocket`实例,然后将要发送的字节数组包装成`...
Java聊天程序基于UDP协议,这是一种使用用户数据报协议(User Datagram Protocol)来实现网络通信的简单聊天工具。UDP是传输层的一种无连接协议,与TCP相比,它更注重速度和效率,而对数据的可靠传输则相对较少保障...
UDP是一种在网络应用中广泛使用的传输层协议,与TCP(传输控制协议)相比,它不提供可靠的数据传输服务,但具有更低的延迟和更高的效率,特别适合实时性要求高的应用场景,如在线游戏、视频会议等。 【描述】:...
在Java中,我们使用`java.net.DatagramSocket`类来创建一个UDP套接字,用于发送和接收数据报。`DatagramPacket`类用于封装我们要发送的数据和目标地址。以下是一个简单的UDP客户端示例: ```java import java.io....
* 在Java语言中,UDP编程可以使用以下步骤:创建 DatagramSocket 对象、设置服务器端口、发送数据报文、接收数据报文、关闭Socket对象。 知识点3:基于UDP协议的网络聊天系统设计 * 该系统采用客户端/服务器(C/S...
Java网络编程中,UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,它在TCP/IP协议栈中位于传输层。与TCP相比,UDP更轻量级,速度快,适合于对实时性要求较高的应用,如视频通话、在线游戏等。本篇...
总的来说,基于UDP协议的聊天程序设计涵盖了网络编程基础、多线程处理、数据传输的可靠性保障等多个知识点。通过实践这个项目,开发者可以深入理解UDP协议的特点,并掌握如何在Java环境下构建高效、实时的网络应用...
在“基于UDP的网络排号系统”中,我们关注的是使用用户数据报协议(User Datagram Protocol, UDP)作为通信基础的实现方式。 【描述】:“基于UDP的网络排号系统,在j2se环境下运行的,简单操作” 这个系统...
总的来说,Java基于UDP协议的聊天程序展示了网络编程的基本原理和技巧,包括网络连接、数据传输、异常处理和多线程操作等。通过这个程序,开发者可以深入理解UDP协议的特性,并掌握如何在实际项目中应用这些知识。
Java UDP套接字网络编程是Java编程领域中的一个重要部分,主要涉及如何利用Java的Socket类库来实现基于用户数据报协议(User Datagram Protocol)的通信。UDP是一种无连接的、不可靠的传输协议,适用于对实时性要求...
【标题】中的“基于UDP协议与Socket接口的网络通信编程实验1”指的是一项实践性的学习任务,旨在通过编程实现基于UDP(User Datagram Protocol)协议和Socket接口的网络通信功能。UDP是一种无连接的传输层协议,常...
Java基于UDP协议的可靠通信系统设计与实现是一个关键的网络编程课题,主要涉及到网络通信的基础原理、UDP协议的特性和如何克服其不可靠性。在这个项目中,源码分为"Client"和"Server"两个部分,分别代表客户端和...
为了更好地理解UDP编程,可以通过以下步骤构建一个简单的发送和接收数据的示例: 1. **创建DatagramSocket实例**: - 创建一个绑定到特定端口的`DatagramSocket`实例作为服务器端。 - 创建一个未绑定端口的`...
UDP是面向数据报的协议,它不建立连接也不维护连接状态,每个数据报独立发送,可能会在网络中丢失、重复或乱序到达。这种特性使得UDP适用于实时应用,如音频、视频流传输,以及需要快速响应但对数据完整性的要求不高...