Java手册
java.net
Class DatagramSocket
- java.lang.Object
-
- java.net.DatagramSocket
-
- All Implemented Interfaces:
- Closeable, AutoCloseable
- 已知直接子类:
- MulticastSocket
public class DatagramSocket extends Object implements Closeable
这个类代表数据包发送和接收数据报套接字。
数据报套接字发送或接收包送货服务。每个数据包的发送或接收数据报套接字单独处理和路由。发送多个数据包从一台机器到另一个可能是路由不同,并可能抵达任何顺序。
在可能的情况下,新建
DatagramSocket
SO_BROADCAST
套接字选项启用允许广播数据报的传输。为了接收广播数据包DatagramSocket应该绑定到通配符地址。在一些实现,也可能是接收广播数据包DatagramSocket时绑定到一个更具体的地址。例如:
DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
相当于:DatagramSocket s = new DatagramSocket(8888);
两种情况下将创建一个DatagramSocket能够接收广播在UDP端口8888。 - 从以下版本开始:
- JDK1.0
- 另请参见:
DatagramPacket
,DatagramChannel
-
构造方法摘要
构造方法 Modifier Constructor and Description DatagramSocket()
构造一个数据报套接字绑定到本地主机机器上的任何可用的端口。
protected
DatagramSocket(DatagramSocketImpl impl)
创建数据报套接字与指定的DatagramSocketImpl不限。
DatagramSocket(int port)
构造一个数据报套接字绑定到本地主机上的指定端口。
DatagramSocket(int port, InetAddress laddr)
创建数据报套接字,绑定到指定的本地地址。
DatagramSocket(SocketAddress bindaddr)
创建数据报套接字,绑定到指定的本地套接字地址。
方法摘要
Modifier and Type | Method and Description |
---|---|
void |
bind(SocketAddress addr)
结合这DatagramSocket到一个特定的地址和端口。 |
void |
close()
关闭这个数据报套接字。 |
void |
connect(InetAddress address, int port)
将套接字连接到远程地址这个套接字。 |
void |
connect(SocketAddress addr)
这个套接字连接到一个远程的套接字地址(IP地址+端口号)。 |
void |
disconnect()
断开连接的套接字。 |
boolean |
getBroadcast()
如果SO_BROADCAST启用设置测试。 |
DatagramChannel |
getChannel()
返回唯一 |
InetAddress |
getInetAddress()
返回此套接字连接的地址。 |
InetAddress |
getLocalAddress()
获取套接字绑定的本地地址。 |
int |
getLocalPort()
返回的端口号在这个套接字绑定的本地主机。 |
SocketAddress |
getLocalSocketAddress()
返回此套接字绑定端点的地址。 |
int |
getPort()
返回此套接字连接的端口号。 |
int |
getReceiveBufferSize()
得到这个 |
SocketAddress |
getRemoteSocketAddress()
返回此套接字连接端点的地址,或 |
boolean |
getReuseAddress()
如果启用了SO_REUSEADDR测试。 |
int |
getSendBufferSize()
得到这个 |
int |
getSoTimeout()
为SO_TIMEOUT检索设置。 |
int |
getTrafficClass()
得到交通类或类型的服务IP数据报的头从这个DatagramSocket发送的数据包。 |
boolean |
isBound()
返回套接字的绑定状态。 |
boolean |
isClosed()
返回是否关闭套接字。 |
boolean |
isConnected()
返回套接字的连接状态。 |
void |
receive(DatagramPacket p)
从这个套接字接收数据报包。 |
void |
send(DatagramPacket p)
从这个套接字发送一个数据报包。 |
void |
setBroadcast(boolean on)
启用/禁用SO_BROADCAST。设置 |
static void |
setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
设置应用程序的数据报套接字实现工厂。 |
void |
setReceiveBufferSize(int size)
设置这个 |
void |
setReuseAddress(boolean on)
启用/禁用SO_REUSEADDR套接字选项。 |
void |
setSendBufferSize(int size)
设置这个 |
void |
setSoTimeout(int timeout)
启用/禁用SO_TIMEOUT与指定的超时时间,以毫秒为单位。 |
void |
setTrafficClass(int tc)
集交通类或类型的服务的IP数据报的头八隅体从这个DatagramSocket数据报。 |
Class DatagramPacket
- java.lang.Object
-
- java.net.DatagramPacket
-
public final class DatagramPacket extends Object
这个类代表一个数据报包。
数据报包是用来实现一个无连接包送货服务。每个消息路由从一台机器到另一个完全基于信息包含在包。发送多个数据包从一台机器到另一个可能是路由不同,并且可能抵达任何顺序。包交付是没有保证的。
- 从以下版本开始:
- JDK1.0
-
构造方法摘要
构造方法 Constructor and Description DatagramPacket(byte[] buf, int length)
构造一个
DatagramPacket
length
接收数据包的长度。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造一个数据报包发送数据包的长度
length
指定主机上的指定端口号。DatagramPacket(byte[] buf, int offset, int length)
构造一个
DatagramPacket
接收数据包的长度length
,指定一个抵消到缓冲。DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
构造一个数据报包发送数据包的长度
length
抵消ioffset
to指定主机上的指定端口号。DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
构造一个数据报包发送数据包的长度
length
抵消ioffset
to指定主机上的指定端口号。DatagramPacket(byte[] buf, int length, SocketAddress address)
构造一个数据报包发送数据包的长度
length
指定主机上的指定端口号。
方法摘要
Modifier and Type | Method and Description |
---|---|
InetAddress |
getAddress()
返回机器的IP地址的数据报发送或者接收的数据报。 |
byte[] |
getData()
返回数据缓冲区。 |
int |
getLength()
返回数据的长度发送或接收到的数据的长度。 |
int |
getOffset()
返回数据的偏移量被发送或接收到的数据的偏移量。 |
int |
getPort()
返回远程主机上的端口号,该数据报发送或接收的数据报。 |
SocketAddress |
getSocketAddress()
得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。 |
void |
setAddress(InetAddress iaddr)
集的机器的IP地址被发送的数据报。 |
void |
setData(byte[] buf)
这个包的数据缓冲区。 |
void |
setData(byte[] buf, int offset, int length)
这个包的数据缓冲区。 |
void |
setLength(int length)
这个包的长度。 |
void |
setPort(int iport)
设置端口号的远程主机发送数据报。 |
void |
setSocketAddress(SocketAddress address)
设置SocketAddress(通常是IP地址+端口号)都的远程主机发送数据报。 |
发送端
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; /** * UDP 发送端 * @author Administrator * */ public class Demo2 { public static void main(String[] args) throws Exception { /** * 准备发送端 * DatagramSocket() * 构造一个数据报套接字绑定到本地主机机器上的任何可用的端口。 */ DatagramSocket ds = new DatagramSocket(); /** * 准备数据包 *1、 DatagramPacket(byte[] buf, int length) * 构造一个 DatagramPacket length接收数据包的长度 *2、 String的getBytes() * 方法是得到一个操作系统默认的编码格式的字节数组 *3、 setSocketAddress() * 设置SocketAddress(通常是IP地址+端口号)都的远程主机发送数据报。 * 4、InetSocketAddress(InetAddress addr, int port) * 创建一个套接字地址的IP地址和端口号。 */ String str = "你好,UDP"; byte[] ch = str.getBytes(); DatagramPacket dp = new DatagramPacket(ch, ch.length); dp.setSocketAddress(new InetSocketAddress("127.0.0.1", 12345)); // 发送数据 ds.send(dp); // 关闭套接字 ds.close(); } }
接收端
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * UDP 接收端 * @author Administrator * */ public class Demo3 { public static void main(String[] args) throws Exception { // 创建接收端 DatagramSocket ds = new DatagramSocket(12345); /** * 接收数据包 * receive(DatagramPacket p) * 从这个套接字接收数据报包。 */ byte[] data = new byte[1024]; DatagramPacket dp = new DatagramPacket(data, data.length); ds.receive(dp); // 获取接受到的信息 String str = new String(data, 0, dp.getLength()); System.out.println(str); // 关闭接收端 ds.close(); } }
原文地址:https://www.cnblogs.com/chuijingjing/p/9544159.html