|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.net
类 DatagramSocket
java.lang.Object java.net.DatagramSocket
- 直接已知子类:
- MulticastSocket
-
public class DatagramSocket
- extends Object
此类表示用来发送和接收数据报包的套接字。
数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。
在 DatagramSocket 上总是启用 UDP 广播发送。为了接收广播包,应该将 DatagramSocket 绑定到通配符地址。在某些实现中,将 DatagramSocket 绑定到一个更加具体的地址时广播包也可以被接收。
示例:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));
这等价于:DatagramSocket s = new DatagramSocket(8888);
两个例子都能创建能够在 UDP 8888 端口上接收广播的 DatagramSocket。
- 从以下版本开始:
- JDK1.0
- 另请参见:
-
DatagramPacket
,DatagramChannel
构造方法摘要 | |
---|---|
|
DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。 |
protected |
DatagramSocket(DatagramSocketImpl impl) 创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。 |
|
DatagramSocket(int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 |
|
DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。 |
|
DatagramSocket(SocketAddress bindaddr) 创建数据报套接字,将其绑定到指定的本地套接字地址。 |
方法摘要 | |
---|---|
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() 返回与此数据报套接字关联的惟一 DatagramChannel 对象(如果有)。 |
InetAddress |
getInetAddress() 返回此套接字连接的地址。 |
InetAddress |
getLocalAddress() 获取套接字绑定的本地地址。 |
int |
getLocalPort() 返回此套接字绑定的本地主机上的端口号。 |
SocketAddress |
getLocalSocketAddress() 返回此套接字绑定的端点的地址,如果尚未绑定则返回 null 。 |
int |
getPort() 返回此套接字的端口。 |
int |
getReceiveBufferSize() 获取此 DatagramSocket 的 SO_RCVBUF 选项的值,该值是平台在 DatagramSocket 上输入时使用的缓冲区大小。 |
SocketAddress |
getRemoteSocketAddress() 返回此套接字连接的端点的地址,如果未连接则返回 null 。 |
boolean |
getReuseAddress() 检测是否启用了 SO_REUSEADDR。 |
int |
getSendBufferSize() 获取此 DatagramSocket 的 SO_SNDBUF 选项的值,该值是平台在 DatagramSocket 上输出时使用的缓冲区大小。 |
int |
getSoTimeout() 重新恢复 SO_TIMEOUT 的设置。 |
int |
getTrafficClass() 为从此 DatagramSocket 上发送的包获取 IP 数据报头中的流量类别或服务类型。 |
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) 将此 DatagramSocket 的 SO_RCVBUF 选项设置为指定的值。 |
void |
setReuseAddress(boolean on) 启用/禁用 SO_REUSEADDR 套接字选项。 |
void |
setSendBufferSize(int size) 将此 DatagramSocket 的 SO_SNDBUF 选项设置为指定的值。 |
void |
setSoTimeout(int timeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 |
void |
setTrafficClass(int tc) 为从此 DatagramSocket 上发送的数据报在 IP 数据报头中设置流量类别 (traffic class) 或服务类型八位组 (type-of-service octet)。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
DatagramSocket
public DatagramSocket() throws SocketException
-
构造数据报套接字并将其绑定到本地主机上任何可用的端口。套接字将被绑定到通配符地址,IP 地址由内核来选择。
如果有安全管理器,则首先使用 0 作为变量来调用其
checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。- 抛出:
-
SocketException
- 如果套接字不能被打开,或不能将其绑定到指定的本地端口。 -
SecurityException
- 如果安全管理器存在并且其checkListen
方法不允许进行该操作。 - 另请参见:
-
SecurityManager.checkListen(int)
DatagramSocket
protected DatagramSocket(DatagramSocketImpl impl)
-
创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。
- 参数:
-
impl
- 子类希望在 DatagramSocket 上使用的 DatagramSocketImpl 的实例。 - 从以下版本开始:
- 1.4
DatagramSocket
public DatagramSocket(SocketAddress bindaddr) throws SocketException
-
创建数据报套接字,将其绑定到指定的本地套接字地址。
如果地址为
null
,创建未绑定的套接字。如果有安全管理器,则首先使用套接字中的端口作为变量来调用其
checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。- 参数:
-
bindaddr
- 要绑定的本地套接字地址,对于未绑定的套接字为null
。 - 抛出:
-
SocketException
- 如果套接字不能被打开,或不能将其绑定到指定的本地端口。 -
SecurityException
- 如果安全管理器存在并且其checkListen
方法不允许进行该操作。 - 从以下版本开始:
- 1.4
- 另请参见:
-
SecurityManager.checkListen(int)
DatagramSocket
public DatagramSocket(int port) throws SocketException
-
创建数据报套接字并将其绑定到本地主机上的指定端口。套接字将被绑定到通配符地址,IP 地址由内核来选择。
如果存在安全管理器,则首先使用
port
参数作为参数调用其checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。- 参数:
-
port
- 要使用的端口。 - 抛出:
-
SocketException
- 如果套接字不能被打开,或不能将其绑定到指定的本地端口。 -
SecurityException
- 如果安全管理器存在并且其checkListen
方法不允许进行该操作。 - 另请参见:
-
SecurityManager.checkListen(int)
DatagramSocket
public DatagramSocket(int port, InetAddress laddr) throws SocketException
-
创建数据报套接字,将其绑定到指定的本地地址。本地端口必须在 0 到 65535 之间(包括两者)。如果 IP 地址为 0.0.0.0,套接字将被绑定到通配符地址,IP 地址由内核选择。
如果存在安全管理器,则首先使用
port
参数作为参数调用其checkListen
方法,以确保允许该操作。这可能会导致 SecurityException 异常。- 参数:
-
port
- 要使用的本地端口 -
laddr
- 要绑定的本地地址 - 抛出:
-
SocketException
- 如果套接字不能被打开,或不能将其绑定到指定的本地端口。 -
SecurityException
- 如果安全管理器存在并且其checkListen
方法不允许进行该操作。 - 从以下版本开始:
- JDK1.1
- 另请参见:
-
SecurityManager.checkListen(int)
方法详细信息 |
---|
bind
public void bind(SocketAddress addr) throws SocketException
-
将此 DatagramSocket 绑定到特定的地址和端口。
如果地址为
null
,则系统将挑选一个临时端口和一个有效本地地址来绑定套接字。 -
- 参数:
-
addr
- 要绑定的地址和端口。 - 抛出:
-
SocketException
- 如果绑定过程中发生错误,或者套接字已经被绑定。 -
SecurityException
- 如果安全管理器存在并且其checkListen
方法不允许进行该操作。 -
IllegalArgumentException
- 如果 addr 是不受此套接字支持的 SocketAddress 子类。 - 从以下版本开始:
- 1.4
connect
public void connect(InetAddress address, int port)
-
将套接字连接到此套接字的远程地址。当套接字连接到远程地址时,包就只能从该地址发送或接收。默认情况下不连接数据报套接字。
如果套接字要连接的远程目标不存在或不可到达,并且收到了该地址的目标不可达 ICMP 包,那么后续发送和接收的调用可能会抛出 PortUnreachableException。注意,不能保证一定抛出该异常。
在连接时检查调用方对给定主机和端口的发送和接收数据报权限。当连接建立起来后,接收和发送除了对包和套接字的地址和端口进行匹配外,对传入和传出的包将不再执行任何安全性检查。对于发送操作,如果设置了包的地址并且包的地址和套接字的地址不匹配,则将抛出 IllegalArgumentException。连接到多播地址的套接字只能用于发送包。
-
- 参数:
-
address
- 套接字的远程地址。 -
port
- 套接字的远程端口。 - 抛出:
-
IllegalArgumentException
- 如果地址为 null,或端口超出了范围。 -
SecurityException
- 如果不允许调用方向此地址和端口发送也不允许从此地址接收数据报。 - 另请参见:
-
disconnect()
,send(java.net.DatagramPacket)
,receive(java.net.DatagramPacket)
connect
public void connect(SocketAddress addr) throws SocketException
- 将此套接字连接到远程套接字地址(IP 地址 + 端口号)。
-
- 参数:
-
addr
- 远程地址。 - 抛出:
-
SocketException
- 如果连接失败 -
IllegalArgumentException
- 如果 addr 为 null 或者 addr 是不受此套接字支持的 SocketAddress 子类。 - 从以下版本开始:
- 1.4
- 另请参见:
-
connect(java.net.InetAddress, int)