`
阅读更多
一、DatagramPacket类:

如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。
构造函数:一个用来接收数据,一个用来发送数据
public DatagramPacket(byte[] buf,int length) //接收数据
构造 DatagramPacket 用来接收长度为 ilength 的包。
public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
构造数据报文包用来把长度为 ilength 的包传送到指定宿主的指定的端口号。
getAddress()
返回接收或发送此数据报文的机器的 IP 地址。
getData()
返回接收的数据或发送出的数据。
getLength()
返回发送出的或接收到的数据的长度。
getPort()
返回接收或发送该数据报文的远程主机端口号。

二、DatagramSocket类

此类表示用来发送和接收数据报包的套接字。 数据报套接字是包投递服务的发送或接收点。
DatagramSocket(int port)     创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramSocket(int port, InetAddress laddr)     创建数据报套接字,将其绑定到指定的本地地址。

receive(DatagramPacket p)
             从此套接字接收数据报包。
void send(DatagramPacket p)
             从此套接字发送数据报包。
bind(SocketAddress addr)
             将此 DatagramSocket 绑定到特定的地址和端口。
void close()
             关闭此数据报套接字。
void connect(InetAddress address, int port)
             将套接字连接到此套接字的远程地址。
void connect(SocketAddress addr)
             将此套接字连接到远程套接字地址(IP 地址 + 端口号)。
void disconnect()
             断开套接字的连接。
getInetAddress()
             返回此套接字连接的地址。
InetAddress getLocalAddress()
             获取套接字绑定的本地地址。
三、InetAddress类
InetAddress用于表示计算机IP地址的一个类,而在日常应用中的IP地址用"192.168.0.1",
"WWW.it315.org"等字符串格式表示的。
getByName方法
getHostAddress方法

四、UDP通信示例代码:

发送端代码UdpSend.java:

import java.net.*;

public class UdpSend {
          public static void main(String[] args) throws Exception{
            DatagramSocket ds=new DatagramSocket();
           String strInfo="Hello Taohx";
           ds.send(new DatagramPacket(strInfo.getBytes(),strInfo.length(),
                                    InetAddress.getByName("59.64.157.93"),3000));
           ds.close();            
       }
}

接收代码UdpRecv.java:

import java.net.*;
public class UdpRecv {
       public static void main(String[] args) throws Exception{
           DatagramSocket ds=new DatagramSocket(3000);
           byte [] buf=new byte[1024];
           DatagramPacket dp=new DatagramPacket(buf,1024);
           ds.receive(dp);
          String strInfo= new String(dp.getData(),0,dp.getLength())+
            " from "+dp.getAddress().getHostAddress()+":"+dp.getPort();
           System.out.println(strInfo);
           ds.close();
            
       }
}

注意:若发送中文信息时,因为中文字符占两个字节,故发送代码 ds.send要修改如下才可正确地发送中文信息,

ds.send(new DatagramPacket(strInfo.getBytes(),strInfo.getBytes().length,
                                   InetAddress.getByName("59.64.157.93"),3000));


***********************************************************************************************************

在Java中操纵UDP

  使用位于JDK中Java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。

  在描述它们之前,必须了解位于同一个位置的InetAddress类。InetAddress实现了Java.io. Serializable接口,不允许继承。它用于描述和包装一个Internet IP地址,通过三个方法返回InetAddress实例:

getLocalhost():返回封装本地地址的实例。

getAllByName(String host):返回封装Host地址的InetAddress实例数组。

getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。

DatagramSocket类用于创建接收和发送UDP的Socket实例。和Socket类依赖SocketImpl类一样,DatagramSocket类的实现也依靠专门为它设计的DatagramScoketImplFactory类。DatagramSocket类有3个构建器:

DatagramSocket():创建实例。这是个比较特殊的用法,通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

值得注意的是,在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获。DatagramSocket类最主要的方法有4个:

Receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。

Send(DatagramPacket d):发送报文d到目的地。

SetSoTimeout(int timeout):设置超时时间,单位为毫秒。

Close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

DatagramPacket类用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。应用程序在产生数据包是应该注意,TCP/IP规定数据报文大小最多包含65507个,通常主机接收548个字节,但大多数平台能够支持8192字节大小的报文。DatagramPacket类的构建器共有4个:

DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从Buf数组中,取出Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从Buf数组中,取出Offset开始的、Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length):将数据包中从Offset开始、Length长的数据装进Buf数组。

DatagramPacket(byte[] buf, int length):将数据包中Length长的数据装进Buf数组。

DatagramPacket类最重要的方法就是getData()了,它从实例中取得报文的Byte数组编码。

简单的实例说明

{接收数据的服务器}


byte[] buf = new byte[1000];

DatagramSocket ds = new DatagramSocket(12345);

//开始监视12345端口

DatagramPacket ip = new DatagramPacket(buf, buf.length);

//创建接收数据报的实例

while (true)

{

ds.receive(ip);

//阻塞,直到收到数据报后将数据装入IP中

System.out.println(new String(buf));

}

{发送数据的客户端}


InetAddress target = InetAddress.getByName(“www.xxx.com“);

//得到目标机器的地址实例

DatagramSocket ds = new DatagramSocket(9999);

//从9999端口发送数据报

String hello = “Hello, I am come in!”;

//要发送的数据

byte[] buf = hello.getBytes();

//将数据转换成Byte类型

op = new DatagramPacket(buf, buf.length, target, 12345);

//将BUF缓冲区中的数据打包

ds.send(op);

//发送数据

ds.close();

//关闭连接
0
0
分享到:
评论

相关推荐

    UDP聊天&文件发送.rar_JAVA socket编程_java_java udp_java udp通信_套接字通信

    以下将详细介绍相关的Java UDP通信和套接字通信知识点。 1. **Java UDP通信基础** - UDP是无连接的,即在发送数据前无需建立连接,因此它的速度较快,但不保证数据的顺序和可靠性。 - Java中的`java.net....

    java UDP通信

    Java UDP通信是网络编程中的一个重要部分,它基于用户数据报协议(User Datagram Protocol),是一种无连接的、不可靠的传输层协议。UDP不提供数据包的顺序保证、错误检查或重传机制,而是以较小的开销换取较高的...

    Java udp通信编程client端

    Java udp通信编程client端

    Java udp通信编程server端

    Java udp通信编程server端程序

    UDP通信Java UDP通信

    Java实现UDP通信,按照固定的帧格式发送数据和接收数据,对数据的格式解码处理。实现了显示同设备的不同工作模式的显示。发送不同的命令数据帧。 Java实现UDP通信,按照固定的帧格式发送数据和接收数据,对数据的...

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现

    SpringMVC的Socket实现+Java Tomcat websocket实现+Java Socket通信实现 +Java UDP通信实现。websocket_study.rar 为springMVC版本的socket实现 websocket02.rar 里面包含tomcat的websocket实现+java socket双向通信...

    Java udp通信

    Java UDP通信是网络编程中的一个重要概念,主要涉及的是使用Java的Socket编程接口中的DatagramSocket类来实现用户数据报协议(UDP)的通信。UDP是一种无连接的、不可靠的传输协议,它不保证数据包的顺序到达或重传...

    java Udp 收发结构体实例 Socket编程

    在Java中,我们通常使用`java.net.DatagramSocket`类来实现UDP通信。 1. **UDP Socket编程基础**: Java中的`DatagramSocket`类用于创建UDP套接字,它允许我们发送和接收数据报包。`DatagramPacket`类则封装了数据...

    android 和java实现UDP通信

    本教程将详细介绍如何在Android和Java中实现UDP通信。 首先,理解UDP的特点至关重要。UDP不提供连接建立、数据确认和流量控制等机制,因此它的开销较小,但同时也意味着数据可能会丢失、重复或乱序。在实现Android ...

    java udp 多线程实现简单的通信

    在Java中,我们可以通过`java.net.DatagramSocket`类来实现UDP通信。多线程技术则能帮助我们在程序中同时处理多个任务,提高程序的并发性能。在这个"java udp 多线程实现简单的通信"的项目中,我们可能看到了如何...

    java UDP通信客户端与服务器端实例分析

    Java UDP 通信客户端与服务器端实例分析 Java UDP 通信客户端与服务器端实例分析是介绍 Java 语言基于 UDP 协议的客户端与服务器端的实现技巧和相关操作注意事项。UDP 协议是一种无连接的网络协议,它不像 TCP 协议...

    java简单UDP通信代码详解

    Java UDP通信是网络编程中的一个重要部分,它基于无连接的用户数据报协议(User Datagram Protocol),相较于TCP,UDP提供了一种轻量级、快速且不可靠的数据传输方式。本资料主要针对初学者,通过简单的代码示例来...

    UDP.rar_UDP_UDP 协议_UDP 通信协议_java udp

    下面是一个简单的Java UDP通信示例: ```java // 服务器端 public class UDPServer { public static void main(String[] args) throws Exception { DatagramSocket serverSocket = new DatagramSocket(12345); ...

    java UDP通讯实例

    在这个Java UDP通信实例中,我们有两个关键文件:`ClientUDP.java` 和 `ServerUDP.java`,它们分别代表UDP通信的客户端和服务端。 ### 客户端 (`ClientUDP.java`) 客户端通常负责发起通信请求,发送数据到服务器。...

    java读写Modbus TCP UDP数据,java与modbus通信,Modbus TCP UDP与java通信 全开源

    java读写Modbus TCP UDP数据,java与modbus通信,Modbus TCP UDP与java通信 全开源 这是一个能正常通过Modbus TCP UDP协议读写项目 请放心下载,完全开源,在多个项目中已经使用

    PC端的UDP通信程序

    本项目是用Java语言编写的一个PC端UDP通信程序,设计用于与安卓设备进行数据交换,特别适用于实时性要求较高的应用,如在线游戏、视频流媒体等。 【描述】中的关键点在于程序是在Eclipse集成开发环境中运行的,这...

    java udp 通讯,java中实现UDP通讯

    Java UDP通信是网络编程中的一个重要部分,UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时数据传输或者对数据完整性要求不高的场景。在Java中,我们通常使用`java.net`包中的`...

    java_UDPSocket_codes.rar_ServerThread_java udp程序

    在Java中,我们使用`java.net.DatagramSocket`类来实现UDP通信。这个压缩包包含的是关于Java多线程UDP服务器程序(ServerThread)和客户端程序的代码示例以及相关的多线程Socket编程资料。 1. **UDP通信基础**: ...

    udp-chat.rar_UDP聊天室_java udp chat_java udp 聊天_udp chat

    Java中实现UDP通信主要依赖于`java.net.DatagramSocket`类。这个类提供了发送和接收UDP数据报文的功能。客户端创建`DatagramSocket`实例,然后可以通过`send()`方法发送`DatagramPacket`,通过`receive()`方法接收...

    Java实现udp通信协议

    以上就是关于“Java实现UDP通信协议”的关键知识点。理解并掌握这些内容,可以帮助开发者实现高效的UDP通信应用,并能处理相关的数据转换、日志记录和异常情况。通过实际项目练习,可以加深对这些概念的理解,并提升...

Global site tag (gtag.js) - Google Analytics