Spec-Zone .ru
спецификации, руководства, описания, API
|
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.
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()
Возвращает адрес конечной точки, с которой связывается этот сокет.
|
int |
getPort()
Возвращает номер порта, с которым соединяется этот сокет.
|
int |
getReceiveBufferSize()
Получите значение опции SO_RCVBUF для этого DatagramSocket, который является размером буфера, используемым платформой для ввода на этом DatagramSocket.
|
SocketAddress |
getRemoteSocketAddress()
Возвращает адрес конечной точки, этот сокет соединяется с, или
null если это несвязано. |
boolean |
getReuseAddress()
Тесты, если SO_REUSEADDR включается.
|
int |
getSendBufferSize()
Получите значение опции SO_SNDBUF для этого DatagramSocket, который является размером буфера, используемым платформой для вывода на этом DatagramSocket.
|
int |
getSoTimeout()
Получите установку для SO_TIMEOUT.
|
int |
getTrafficClass()
Получает трафик class или тип службы в заголовке дейтаграммы 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)
Устанавливает опцию SO_RCVBUF в указанное значение для этого DatagramSocket.
|
void |
setReuseAddress(boolean on)
Позвольте/отключите опции сокета SO_REUSEADDR.
|
void |
setSendBufferSize(int size)
Устанавливает опцию SO_SNDBUF в указанное значение для этого DatagramSocket.
|
void |
setSoTimeout(int timeout)
Позвольте/отключите SO_TIMEOUT с указанным тайм-аутом в миллисекундах.
|
void |
setTrafficClass(int tc)
Трафик наборов class или октет типа службы в заголовке дейтаграммы IP для дейтаграмм передался из этого DatagramSocket.
|
public DatagramSocket() throws SocketException
wildcard
адрес, IP-адрес, выбранный ядром. Если есть менеджер безопасности, checkListen
метод сначала вызывают с 0 как его параметр, чтобы гарантировать, что работа позволяется. Это могло привести к SecurityException.
SocketException
- если сокет не мог бы быть открыт, или сокет не мог бы связать с указанным локальным портом.SecurityException
- если менеджер безопасности существует и checkListen
метод не позволяет работу.SecurityManager.checkListen(int)
protected DatagramSocket(DatagramSocketImpl impl)
impl
- экземпляр DatagramSocketImpl подкласс хочет использовать на DatagramSocket.public DatagramSocket(SocketAddress bindaddr) throws SocketException
Если, если адрес null
, создает несвязанный сокет.
Если есть менеджер безопасности, checkListen
метод сначала вызывают с портом от адреса сокета как его параметр, чтобы гарантировать, что работа позволяется. Это могло привести к SecurityException.
bindaddr
- локальный адрес сокета, чтобы связать, или null
для несвязанного сокета.SocketException
- если сокет не мог бы быть открыт, или сокет не мог бы связать с указанным локальным портом.SecurityException
- если менеджер безопасности существует и checkListen
метод не позволяет работу.SecurityManager.checkListen(int)
public DatagramSocket(int port) throws SocketException
wildcard
адрес, IP-адрес, выбранный ядром. Если есть менеджер безопасности, checkListen
метод сначала вызывают с port
параметр как его параметр, чтобы гарантировать работу позволяется. Это могло привести к SecurityException.
port
- порт, чтобы использовать.SocketException
- если сокет не мог бы быть открыт, или сокет не мог бы связать с указанным локальным портом.SecurityException
- если менеджер безопасности существует и checkListen
метод не позволяет работу.SecurityManager.checkListen(int)
public DatagramSocket(int port, InetAddress laddr) throws SocketException
wildcard
адрес, IP-адрес, выбранный ядром. Если есть менеджер безопасности, checkListen
метод сначала вызывают с port
параметр как его параметр, чтобы гарантировать работу позволяется. Это могло привести к SecurityException.
port
- локальный порт, чтобы использоватьladdr
- локальный адрес, чтобы связатьSocketException
- если сокет не мог бы быть открыт, или сокет не мог бы связать с указанным локальным портом.SecurityException
- если менеджер безопасности существует и checkListen
метод не позволяет работу.SecurityManager.checkListen(int)
public void bind(SocketAddress addr) throws SocketException
Если адрес null
, тогда система поднимет эфемерный порт и допустимый локальный адрес, чтобы связать сокет.
addr
- Адрес & порт, чтобы связать с.SocketException
- если ошибка происходит во время связывания, или если сокет уже связывается.SecurityException
- если менеджер безопасности существует и checkListen
метод не позволяет работу.IllegalArgumentException
- если addr является подклассом SocketAddress, не поддерживаемым этим сокетом.public void connect(InetAddress address, int port)
Если удаленное место назначения, с которым соединяется сокет, не существует, или иначе недостижимо, и если место назначения ICMP, недостижимый пакет был получен для того адреса, то последующий вызов, чтобы передаться или получить может бросить PortUnreachableException. Отметьте, нет никакой гарантии, что исключение будет выдано.
Если менеджер безопасности был установлен тогда, он вызывается, чтобы проверить доступ к удаленному адресу. Определенно, если данный address
a multicast address
, менеджер безопасности checkMulticast
метод вызывается с данным address
. Иначе, менеджер безопасности checkConnect
и checkAccept
методы вызываются с данным address
и port
, проверять, что дейтаграммам разрешают быть отправленными и полученными соответственно.
Когда сокет соединяется, receive
и send
не будет выполнять проверок безопасности при поступлении и исходящих пакетах, кроме соответствия пакета и адрес сокета и порт. На отправить работе, если адрес пакета устанавливается и адрес пакета и адрес сокета не соответствуют, IllegalArgumentException
будет брошен. Сокет, соединенный с многоадресным адресом, может только использоваться, чтобы отправить пакеты.
address
- удаленный адрес для сокетаport
- удаленный порт для сокета.IllegalArgumentException
- если адрес является нулем, или порт испытывает недостаток диапазона.SecurityException
- если менеджер безопасности был установлен, и он не разрешает доступ к данному удаленному адресуdisconnect()
public void connect(SocketAddress addr) throws SocketException
Если дано InetSocketAddress
, этот метод ведет себя как будто вызов connect(InetAddress,int)
с данный сокет адресует IP-адрес и номер порта.
addr
- Удаленный адрес.SocketException
- если соединить сбоиIllegalArgumentException
- если addr
null
, или addr
подкласс SocketAddress, не поддерживаемый этим сокетомSecurityException
- если менеджер безопасности был установлен, и он не разрешает доступ к данному удаленному адресуpublic void disconnect()
connect(java.net.InetAddress, int)
public boolean isBound()
Если сокет был связан до того, чтобы быть closed
, тогда этот метод будет продолжать возвращаться true
после того, как сокет закрывается.
public boolean isConnected()
Если сокет был соединен до того, чтобы быть closed
, тогда этот метод будет продолжать возвращаться true
после того, как сокет закрывается.
public InetAddress getInetAddress()
null
если сокет не соединяется. Если сокет был соединен до того, чтобы быть closed
, тогда этот метод будет продолжать возвращать соединенный адрес после того, как сокет будет закрыт.
public int getPort()
-1
если сокет не соединяется. Если сокет был соединен до того, чтобы быть closed
, тогда этот метод будет продолжать возвращать соединенный номер порта после того, как сокет будет закрыт.
public SocketAddress getRemoteSocketAddress()
null
если это несвязано. Если сокет был соединен до того, чтобы быть closed
, тогда этот метод будет продолжать возвращать соединенный адрес после того, как сокет будет закрыт.
SocketAddress
представление удаленной конечной точки этого сокета, или null
если это еще не соединяется.getInetAddress()
, getPort()
, connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
SocketAddress
представление локальной конечной точки этого сокета, или null
если это закрывается или не связывается все же.getLocalAddress()
, getLocalPort()
, bind(SocketAddress)
public void send(DatagramPacket p) throws IOException
DatagramPacket
включает информацию, указывающую на данные, которые будут отправлены, его длина, IP-адрес удаленного узла, и номер порта на удаленном узле. Если есть менеджер безопасности, и сокет в настоящий момент не соединяется с удаленным адресом, этот метод сначала выполняет некоторые проверки безопасности. Во-первых, если p.getAddress().isMulticastAddress()
истина, это вызовы метода менеджер безопасности checkMulticast
метод с p.getAddress()
как его параметр. Если оценка того выражения является ложью, этот метод вместо этого вызывает менеджера безопасности checkConnect
метод с параметрами p.getAddress().getHostAddress()
и p.getPort()
. Каждый звонок в метод менеджера безопасности мог привести к SecurityException, если работа не позволяется.
p
- DatagramPacket
быть отправленным.IOException
- если ошибка ввода-вывода происходит.SecurityException
- если менеджер безопасности существует и checkMulticast
или checkConnect
метод не позволяет отправление.PortUnreachableException
- может быть брошен, если сокет соединяется с в настоящий момент недостижимым местом назначения. Отметьте, нет никакой гарантии, что исключение будет выдано.IllegalBlockingModeException
- если у этого сокета есть связанный канал, и канал находится в неблокировании режима.IllegalArgumentException
- если сокет соединяется, и соединил адрес, и пакетный адрес отличаются.DatagramPacket
, SecurityManager.checkMulticast(InetAddress)
, SecurityManager.checkConnect(java.lang.String, int)
public void receive(DatagramPacket p) throws IOException
DatagramPacket
's буфер заполнено полученными данными. Пакет дейтаграммы также содержит IP-адрес отправителя, и номер порта на машине отправителя. Этот метод блоки до дейтаграммы получается. length
поле пакетного объекта дейтаграммы содержит длину полученного сообщения. Если сообщение более длинно чем длина пакета, сообщение является усеченным.
Если есть менеджер безопасности, пакет не может быть получен если менеджер безопасности checkAccept
метод не позволяет это.
p
- DatagramPacket
в который можно поместить входящие данные.IOException
- если ошибка ввода-вывода происходит.SocketTimeoutException
- если setSoTimeout ранее вызвали, и тайм-аут истек.PortUnreachableException
- может быть брошен, если сокет соединяется с в настоящий момент недостижимым местом назначения. Отметьте, нет никакой гарантии, что исключение будет выдано.IllegalBlockingModeException
- если у этого сокета есть связанный канал, и канал находится в неблокировании режима.DatagramPacket
, DatagramSocket
public InetAddress getLocalAddress()
Если есть менеджер безопасности, checkConnect
метод сначала вызывают с адресом узла и -1
как его параметры, чтобы видеть, позволяется ли работа.
null
если сокет закрывается, или InetAddress
представление wildcard
адресуйтесь, если или сокет не связывается, или менеджер безопасности checkConnect
метод не позволяет работуSecurityManager.checkConnect(java.lang.String, int)
public int getLocalPort()
-1
если сокет закрывается, или 0
если это еще не связывается.public void setSoTimeout(int timeout) throws SocketException
timeout
- указанный тайм-аут в миллисекундах.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.getSoTimeout()
public int getSoTimeout() throws SocketException
SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.setSoTimeout(int)
public void setSendBufferSize(int size) throws SocketException
Поскольку SO_SNDBUF является подсказкой, приложения, которые хотят проверить то, что размер буфер, должны вызвать getSendBufferSize()
.
Увеличение размера буфера может позволить многократным исходящим пакетам быть поставленными в очередь сетевой реализацией, когда отправить уровень высок.
Отметьте: Если send(DatagramPacket)
используется, чтобы отправить a DatagramPacket
это больше чем установка SO_SNDBUF тогда, это - реализация, определенная, если пакет отправляется или отбрасывается.
size
- размер, в который можно установить отправить размер буфера. Это значение должно быть больше чем 0.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.IllegalArgumentException
- если значение 0 или отрицательно.getSendBufferSize()
public int getSendBufferSize() throws SocketException
SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.setSendBufferSize(int)
public void setReceiveBufferSize(int size) throws SocketException
Поскольку SO_RCVBUF является подсказкой, приложения, которые хотят проверить то, во что был установлен размер буферы, должны вызвать getReceiveBufferSize()
.
Увеличение SO_RCVBUF может позволить сетевой реализации буферизовать многократные пакеты, когда пакеты прибывают быстрее чем, получается, используя receive(DatagramPacket)
.
Отметьте: Это - реализация, определенная, если пакет, больше чем SO_RCVBUF, может быть получен.
size
- размер, в который можно установить получить размер буфера. Это значение должно быть больше чем 0.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.IllegalArgumentException
- если значение 0 или отрицательно.getReceiveBufferSize()
public int getReceiveBufferSize() throws SocketException
SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.setReceiveBufferSize(int)
public void setReuseAddress(boolean on) throws SocketException
Для сокетов UDP может быть необходимо связать больше чем один сокет с тем же самым адресом сокета. Это обычно с целью получения многоадресных пакетов (См. MulticastSocket
). Опция сокета SO_REUSEADDR позволяет многократным сокетам быть связанными с тем же самым адресом сокета, если опция сокета SO_REUSEADDR включается до привязки использования сокета bind(SocketAddress)
.
Отметьте: Эта функциональность не поддерживается всеми существующими платформами, таким образом, это - реализация, определенная, будет ли эта опция проигнорирована или нет. Однако, если это не поддерживается тогда getReuseAddress()
будет всегда возвращаться false
.
Когда DatagramSocket создается, начальная установка SO_REUSEADDR отключается.
Поведение, когда SO_REUSEADDR включается или отключается после сокета, связывается (См. isBound()
) не определяется.
on
- включить ли или отключитьSocketException
- если ошибка происходит, включая или отключая опцию сокета SO_RESUEADDR, или сокет закрывается.getReuseAddress()
, bind(SocketAddress)
, isBound()
, isClosed()
public boolean getReuseAddress() throws SocketException
boolean
указание, включается ли SO_REUSEADDR.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.setReuseAddress(boolean)
public void setBroadcast(boolean on) throws SocketException
Некоторые операционные системы могут потребовать, чтобы виртуальная машина Java была запущена с реализации определенные полномочия включить этой опции или отправить широковещательные дейтаграммы.
on
- широковещательно передать ли включенный.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.getBroadcast()
public boolean getBroadcast() throws SocketException
boolean
указание, включается ли SO_BROADCAST.SocketException
- если есть ошибка в базовом протоколе, таком как ошибка UDP.setBroadcast(boolean)
public void setTrafficClass(int tc) throws SocketException
tc должен быть в диапазоне 0 <= tc <=
255
or an IllegalArgumentException will be thrown.
Notes:
For Internet Protocol v4 the value consists of an integer
, the least significant 8 bits of which represent the value of the TOS octet in IP packets sent by the socket. RFC 1349 defines the TOS values as follows:
IPTOS_LOWCOST (0x02)
IPTOS_RELIABILITY (0x04)
IPTOS_THROUGHPUT (0x08)
IPTOS_LOWDELAY (0x10)
Setting bits in the precedence field may result in a SocketException indicating that the operation is not permitted.
for Internet Protocol v6 tc
is the value that would be placed into the sin6_flowinfo field of the IP header.
tc
- an int
value for the bitset.SocketException
- if there is an error setting the traffic class or type-of-servicegetTrafficClass()
public int getTrafficClass() throws SocketException
As the underlying network implementation may ignore the traffic class or type-of-service set using setTrafficClass(int)
this method may return a different value than was previously set using the setTrafficClass(int)
method on this DatagramSocket.
SocketException
- if there is an error obtaining the traffic class or type-of-service value.setTrafficClass(int)
public void close()
Any thread currently blocked in receive(java.net.DatagramPacket)
upon this socket will throw a SocketException
.
If this socket has an associated channel then the channel is closed as well.
close
in interface Closeable
close
in interface AutoCloseable
public boolean isClosed()
public DatagramChannel getChannel()
DatagramChannel
object associated with this datagram socket, if any. A datagram socket will have a channel if, and only if, the channel itself was created via the DatagramChannel.open
method.
public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
When an application creates a new datagram socket, the socket implementation factory's createDatagramSocketImpl
method is called to create the actual datagram socket implementation.
Passing null
to the method is a no-op unless the factory was already set.
If there is a security manager, this method first calls the security manager's checkSetFactory
method to ensure the operation is allowed. This could result in a SecurityException.
fac
- the desired factory.IOException
- if an I/O error occurs when setting the datagram socket factory.SocketException
- if the factory is already defined.SecurityException
- if a security manager exists and its checkSetFactory
method doesn't allow the operation.DatagramSocketImplFactory.createDatagramSocketImpl()
, SecurityManager.checkSetFactory()
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.
DRAFT ea-b92