`

基于UDP协议的网络编程(使用DatagramSocket发送接收数据)

    博客分类:
  • Java
阅读更多
一: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();
}
}
分享到:
评论

相关推荐

    基于UDP的网络编程2

    UDP编程中,可能会遇到如网络中断、地址解析失败等问题,需要适当地捕获和处理异常,如`IOException`。 9. 实战应用: 在实际项目中,基于UDP的网络编程可用于实现聊天应用、实时游戏、数据采集系统等。例如,一...

    基于UDP和TCP协议的Socket(网络编程/套接字)案例

    UDP则是一种无连接的、不可靠的、基于数据报的传输协议。它不保证数据的顺序或完整性,也不进行错误检测和重传,因此UDP具有更高的传输效率,但同时也可能导致数据丢失。UDP适用于对实时性要求高的应用,如在线视频...

    基于UDP的网络编程-1

    在IT行业中,网络编程是构建分布式系统和网络应用的基础,而UDP(User Datagram Protocol)作为传输层协议之一,因其轻量级、高效的特点,在实时通信、流媒体、在线游戏等领域广泛应用。本篇主要探讨Java环境下如何...

    基于UDP协议的Socket编程

    总的来说,基于UDP协议的Socket编程利用`DatagramPacket`和`DatagramSocket`类,能够在Java中实现高效且无连接的网络通信。这种通信方式适用于对延迟敏感、不需要数据顺序保证的场景,但也意味着开发者需要自行处理...

    java基于UDP协议的聊天程序(完整版)

    Java基于UDP协议的聊天程序是一种实现网络通信的应用实例,它利用了无连接的用户数据报协议(User Datagram Protocol,简称UDP)进行数据传输。在这个完整版的程序中,开发者已经完成了从设计到调试的全部过程,使其...

    编程实现基于UDP的PING (Java)

    通常,PING基于ICMP(Internet Control Message Protocol)协议,但在这个特定的课程设计中,我们将关注如何使用UDP(User Datagram Protocol)来实现类似的机制。下面将详细解释基于UDP的PING实现以及相关的Java...

    UDP的发送接收例子 及SNMP trap

    在Java中,我们使用`java.net.DatagramSocket`类来创建一个UDP套接字,然后用`DatagramPacket`封装要发送的数据和目标地址。例如,我们可能先创建一个`DatagramSocket`实例,然后将要发送的字节数组包装成`...

    java聊天程序 基于udp协议

    Java聊天程序基于UDP协议,这是一种使用用户数据报协议(User Datagram Protocol)来实现网络通信的简单聊天工具。UDP是传输层的一种无连接协议,与TCP相比,它更注重速度和效率,而对数据的可靠传输则相对较少保障...

    java网络编程,UDP,发送16进制报文。

    在Java中,我们使用`java.net.DatagramSocket`类来创建一个UDP套接字,用于发送和接收数据报。`DatagramPacket`类用于封装我们要发送的数据和目标地址。以下是一个简单的UDP客户端示例: ```java import java.io....

    基于udp协议的局域网的端端聊天程序

    UDP是一种在网络应用中广泛使用的传输层协议,与TCP(传输控制协议)相比,它不提供可靠的数据传输服务,但具有更低的延迟和更高的效率,特别适合实时性要求高的应用场景,如在线游戏、视频会议等。 【描述】:...

    基于UDP网络通信系统的服务端程序设计课程设计

    * 在Java语言中,UDP编程可以使用以下步骤:创建 DatagramSocket 对象、设置服务器端口、发送数据报文、接收数据报文、关闭Socket对象。 知识点3:基于UDP协议的网络聊天系统设计 * 该系统采用客户端/服务器(C/S...

    java使用udp协议和硬件进行数据收发处理

    Java网络编程中,UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,它在TCP/IP协议栈中位于传输层。与TCP相比,UDP更轻量级,速度快,适合于对实时性要求较高的应用,如视频通话、在线游戏等。本篇...

    基于UDP协议的聊天程序

    总的来说,基于UDP协议的聊天程序设计涵盖了网络编程基础、多线程处理、数据传输的可靠性保障等多个知识点。通过实践这个项目,开发者可以深入理解UDP协议的特点,并掌握如何在Java环境下构建高效、实时的网络应用...

    基于UDP的网络排号系统

    在“基于UDP的网络排号系统”中,我们关注的是使用用户数据报协议(User Datagram Protocol, UDP)作为通信基础的实现方式。 【描述】:“基于UDP的网络排号系统,在j2se环境下运行的,简单操作” 这个系统...

    java基于UDP协议的聊天程序(可运行).zip

    总的来说,Java基于UDP协议的聊天程序展示了网络编程的基本原理和技巧,包括网络连接、数据传输、异常处理和多线程操作等。通过这个程序,开发者可以深入理解UDP协议的特性,并掌握如何在实际项目中应用这些知识。

    java udp socket 网络编程

    Java UDP套接字网络编程是Java编程领域中的一个重要部分,主要涉及如何利用Java的Socket类库来实现基于用户数据报协议(User Datagram Protocol)的通信。UDP是一种无连接的、不可靠的传输协议,适用于对实时性要求...

    20151910042-刘鹏-CN实验04-基于UDP协议与Socket接口的网络通信编程实验1

    【标题】中的“基于UDP协议与Socket接口的网络通信编程实验1”指的是一项实践性的学习任务,旨在通过编程实现基于UDP(User Datagram Protocol)协议和Socket接口的网络通信功能。UDP是一种无连接的传输层协议,常...

    java基于UDP协议的可靠通讯系统的设计与实现程序源码.rar

    Java基于UDP协议的可靠通信系统设计与实现是一个关键的网络编程课题,主要涉及到网络通信的基础原理、UDP协议的特性和如何克服其不可靠性。在这个项目中,源码分为"Client"和"Server"两个部分,分别代表客户端和...

    UDP的网络编程

    为了更好地理解UDP编程,可以通过以下步骤构建一个简单的发送和接收数据的示例: 1. **创建DatagramSocket实例**: - 创建一个绑定到特定端口的`DatagramSocket`实例作为服务器端。 - 创建一个未绑定端口的`...

    基于UDP协议的Socket通信.rar_UDP_javase_网络编程

    UDP是面向数据报的协议,它不建立连接也不维护连接状态,每个数据报独立发送,可能会在网络中丢失、重复或乱序到达。这种特性使得UDP适用于实时应用,如音频、视频流传输,以及需要快速响应但对数据完整性的要求不高...

Global site tag (gtag.js) - Google Analytics