`

udp 简单使用

    博客分类:
  • J2SE
阅读更多
udp 概述

      user datagram protocol , 用户数据报协议,
      无连接的协议,发送端无法得知发送结果,

      特点:
            高效,
            稳定性 & 可靠性 差,

      udp 相关类:SocketAddress,DatagramPacket,DatagramSocket

------
1 SocketAddress

表示 socket 端口,即 ip:port,
SocketAddress 是 虚类,其实现类为 InetSocketAddress,

如:
      InetSocketAddress isa = new InetSocketAddress("127.0.0.1", 29191);

------
2 DatagramPacket

用于表示 数据包,

属性:
* data
      byte[] , 用于存储数据,包括 接受 和 发送的数据,
* address & port
      表示了其 socket 地址,
* ...
*

如:
      InetSocketAddress isa = new InetSocketAddress("127.0.0.1", 29191);
      byte[] bsSd = { 12, 43, 67 };
      DatagramPacket dpSd = new DatagramPacket(bsSd, bsSd.length);
      dataPacket.setSocketAddress(isa);

------
3 DatagramSocket

用于 发送 & 接收 数据,

DatagramSocket 中数据的存储
      DatagramSocket 使用 DatagramPacket 存储数据,包括 发送 和 接收,

方法:
      * send()
            发送
      * receive()
            接收
      *

如:
      InetSocketAddress isa = new InetSocketAddress("127.0.0.1", 29191);
      // sender
      byte[] bsSd = { 12, 43, 67 };
      DatagramPacket dpSd = new DatagramPacket(bsSd, bsSd.length);
      DatagramSocket dsSd = new DatagramSocket();
      dpSd.setSocketAddress(isa);
      dsSd.send(dpSd);
      System.out.println("send:" + dpSd.getData()[0] + " ... ," + new Date());

------
例子

* 发送数据
package eric.udp.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.Date;
import java.util.Random;

public class UdpSender implements Runnable {
	private SocketAddress target;
	private DatagramPacket dataPacket;
	private DatagramSocket dataSender;

	public UdpSender() {}

	public UdpSender(SocketAddress target, DatagramPacket dataPacket, DatagramSocket dataSender) {
		this.target = target;
		this.dataPacket = dataPacket;
		this.dataSender = dataSender;
	}

	@Override
	public void run() {
		Random rd = new Random();
		try {
			while (true) {
				Thread.sleep(1000);
				dataPacket.getData()[0] = (byte) rd.nextInt(127);
				dataPacket.setSocketAddress(target);
				dataSender.send(dataPacket);
				System.out.println("send:" + dataPacket.getData()[0] + " ... ," + new Date());
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		try {
			byte[] bs = { 12, 43, 67 };
			InetSocketAddress isa = new InetSocketAddress("127.0.0.1", 29191);
			DatagramPacket dp = new DatagramPacket(bs, bs.length);
			DatagramSocket ds = new DatagramSocket();
			UdpSender sender = new UdpSender(isa, dp, ds);
			Thread t = new Thread(sender);
			t.start();
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	public SocketAddress getTarget() {
		return target;
	}

	public void setTarget(SocketAddress target) {
		this.target = target;
	}

	public DatagramPacket getDataPacket() {
		return dataPacket;
	}

	public void setDataPacket(DatagramPacket dataPacket) {
		this.dataPacket = dataPacket;
	}

	public DatagramSocket getDataSender() {
		return dataSender;
	}

	public void setDataSender(DatagramSocket dataSender) {
		this.dataSender = dataSender;
	}
}



* 接收数据
package eric.udp.test;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.Date;

public class UdpReceiver implements Runnable {
	private SocketAddress source;
	private DatagramPacket dataPacket;
	private DatagramSocket dataReceiver;

	public UdpReceiver() {}

	public UdpReceiver(SocketAddress target, DatagramPacket dataPacket, DatagramSocket dataSender) {
		this.source = target;
		this.dataPacket = dataPacket;
		this.dataReceiver = dataSender;
	}

	@Override
	public void run() {
		while (true) {
			try {
				Thread.sleep(50);
				dataPacket.setSocketAddress(source);
				// 该方法将阻塞线程,不断监听,直到收到数据
				dataReceiver.receive(dataPacket);
				System.out.println("receiver:" + dataPacket.getData()[0] + " ... ," + new Date());
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		try {
			byte[] bs = new byte[100];
			InetSocketAddress isa = new InetSocketAddress("127.0.0.1", 29191);
			DatagramPacket dp = new DatagramPacket(bs, bs.length);
			DatagramSocket ds = new DatagramSocket();
			UdpReceiver receiver = new UdpReceiver(isa, dp, ds);
			Thread t = new Thread(receiver);
			t.start();
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	public SocketAddress getSource() {
		return source;
	}

	public void setSource(SocketAddress source) {
		this.source = source;
	}

	public DatagramPacket getDataPacket() {
		return dataPacket;
	}

	public void setDataPacket(DatagramPacket dataPacket) {
		this.dataPacket = dataPacket;
	}

	public DatagramSocket getDataReceiver() {
		return dataReceiver;
	}

	public void setDataReceiver(DatagramSocket dataReceiver) {
		this.dataReceiver = dataReceiver;
	}
}



------
分享到:
评论

相关推荐

    udp在ros中简单使用

    综上所述,"udp在ros中简单使用"涵盖了创建ROS UDP服务器和客户端节点,处理ROS消息与UDP数据流之间的转换,以及如何在ROS的框架内实现网络通信。这个主题涉及到ROS编程、网络编程和数据序列化等多个方面,对于实现...

    vfp udp简易通讯,有源码

    标题中的“vfp udp简易通讯,有源码”指的是使用Visual FoxPro(VFP)编程语言实现的一个基于UDP协议的简单通信程序。UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,常用于实时数据传输,如...

    UDP简易聊天室

    UDP简易聊天室是一种基于用户数据报协议(User Datagram Protocol,UDP)实现的简单通信系统,主要功能包括用户上线、下线的通知,获取在线用户列表以及用户间的点对点聊天。以下将详细介绍这些功能及其背后的UDP...

    UDP简单聊天程序示例

    在这个"UDP简单聊天程序示例"中,我们将探讨如何利用C#中的`UdpClient`类来实现一个简单的UDP聊天应用。 首先,我们要理解`UdpClient`类在.NET Framework中的作用。`UdpClient`是System.Net.Sockets命名空间下的一...

    c# UdpClient 使用示例

    综上所述,"C#简单的Udp示例"应包含创建UdpClient对象、绑定到端口、发送和接收数据的完整流程,同时展示了UDP协议在C#环境下的应用。初学者可以通过此示例学习到基本的网络编程概念,以及如何在实际项目中使用Udp...

    UDP/TCP的简单使用

    4. **多路复用**:UDP使用端口号区分不同的服务,允许多个应用程序同时使用同一网络连接。 在实际应用中,TCP常用于需要高可靠性的场景,如HTTP、HTTPS、FTP等;而UDP则适用于对实时性要求较高但可以容忍少量数据...

    UDP简单通信程序

    下面我们将深入探讨如何使用C#编写UDP简单通信程序。 1. **创建UdpClient对象** 在C#中,首先需要创建一个UdpClient对象,这将用于发送和接收数据。例如: ```csharp UdpClient udpClient = new UdpClient(); `...

    UDP简易客户端与服务器端程序(Java)

    在这个Java实现的UDP简易客户端与服务器端程序中,我们可以通过两个核心文件——UDPClient.java和UDPServer.java来理解其工作原理。 首先,让我们来看看`UDPServer.java`。服务器端通常负责监听特定的端口,接收...

    UDP-UE5.3 UDP-UE5.3

    UDP(User Datagram Protocol)是互联网协议族中的一种无连接、不可靠的传输协议,与TCP(Transmission Control Protocol)相比,它的设计更为简单,主要适用于对实时性要求高的应用,如在线游戏、视频会议等。...

    Matlab 的内网UDP简单通讯实现

    【Matlab UDP简单通讯实现】 在信息技术领域,UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于需要高效传输且对数据完整性要求不高的应用。Matlab作为一个强大的数值计算和数据分析工具,也提供了...

    UDP简单文件传输

    在这个“UDP简单文件传输”项目中,开发人员利用MFC(Microsoft Foundation Classes)库创建了一个用户界面,MFC是微软提供的一个C++类库,用于构建Windows应用程序,它简化了图形用户界面的编程工作。通过MFC,...

    基于UDP的简单聊天

    在基于UDP的简单聊天系统中,我们将重点讨论如何利用UDP协议进行数据通信,以及在VC++环境中实现这样的系统。 首先,理解UDP的特点至关重要。与TCP(Transmission Control Protocol)不同,UDP不建立连接,没有握手...

    C# UDP,TCP简单例子

    "C# UDP,TCP简单例子"这个项目为初学者提供了一个很好的起点,让他们能够理解如何在C#中使用UDP和TCP进行网络通信。通过学习这个项目,开发者不仅可以了解基本的网络通信概念,还能掌握如何在实际应用中实现这些...

    Qt UDP通信 新手使用

    下面是一个简单的Qt UDP通信的客户端和服务端示例: 1. **服务端(Server)** - 首先,创建一个QUdpSocket实例并绑定到特定的IP地址和端口号,例如: ```cpp QUdpSocket serverSocket; serverSocket.bind...

    MFC UDP通信简单实现

    UDP套接字编程相较于TCP更为简单,因为UDP不需要建立连接,也不需要进行握手确认。服务器端不需要使用listen函数监听连接请求,客户端也不需要使用connect函数来建立连接。相反,服务器端可以使用recvfrom函数来接收...

    Udp简单收发器

    ### 使用`UdpClient`实现简单收发器 创建一个简单的UDP收发器通常包括以下步骤: 1. 创建`UdpClient`实例,可以指定本地监听的端口号,如果不指定,则会随机分配一个可用的端口。 2. 设置发送数据的目标地址和端口...

    UDP传输例子 UDP源码 UDP UDP传输 UDP发送文件 UDP发送

    一个简单的UDP发送示例如下(以Python为例): ```python import socket # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定本地地址 server_address = ('localhost', 12345) sock...

    C#编写上位机使用UDP给单片机发送Json格式数据

    为了调试和测试,你可能需要编写一个简单的单片机模拟器或者使用网络工具(如Wireshark)来监控UDP通信。确保Json数据能够正确地序列化、发送和接收,这对于理解整个通信过程至关重要。 总结,使用C#编写上位机并...

    j2me使用udp的简单连接

    本篇将深入讲解如何在J2ME环境中实现一个简单的UDP连接,包括服务器端(Server)和客户端(Client)的编程。 首先,我们来看`Server.java`。服务器端通常负责监听特定的端口,接收客户端发送的数据,并可能向客户端...

    vb UDP广播示例

    VB6中的Socket控件(MSComm32.OCX)提供了一种简单的方式来处理TCP/IP和UDP通信。通过设置Socket控件的相关属性和方法,我们可以轻松实现UDP广播功能。 3. **设置Socket控件**: - **Protocol属性**:设置为2表示...

Global site tag (gtag.js) - Google Analytics