📄 socket.java
字号:
return 0; } /** * This method sets the value for the system level socket option * SO_SNDBUF to the specified value. Note that valid values for this * option are specific to a given operating system. * * @param size The new send buffer size. * * @exception SocketException If an error occurs or Socket not connected * @exception IllegalArgumentException If size is 0 or negative * * @since 1.2 */ public void setSendBufferSize (int size) throws SocketException { if (impl == null) throw new SocketException("Not connected"); if (size <= 0) throw new IllegalArgumentException("SO_SNDBUF value must be > 0"); impl.setOption(SocketOptions.SO_SNDBUF, new Integer(size)); } /** * This method returns the value of the system level socket option * SO_SNDBUF, which is used by the operating system to tune buffer * sizes for data transfers. * * @return The send buffer size. * * @exception SocketException If an error occurs or socket not connected * * @since 1.2 */ public int getSendBufferSize () throws SocketException { if (impl == null) throw new SocketException("Not connected"); Object buf = impl.getOption(SocketOptions.SO_SNDBUF); if (buf instanceof Integer) return(((Integer)buf).intValue()); else throw new SocketException("Internal Error: Unexpected type"); } /** * This method sets the value for the system level socket option * SO_RCVBUF to the specified value. Note that valid values for this * option are specific to a given operating system. * * @param size The new receive buffer size. * * @exception SocketException If an error occurs or Socket is not connected * @exception IllegalArgumentException If size is 0 or negative * * @since 1.2 */ public void setReceiveBufferSize (int size) throws SocketException { if (impl == null) throw new SocketException("Not connected"); if (size <= 0) throw new IllegalArgumentException("SO_RCVBUF value must be > 0"); impl.setOption(SocketOptions.SO_RCVBUF, new Integer(size)); } /** * This method returns the value of the system level socket option * SO_RCVBUF, which is used by the operating system to tune buffer * sizes for data transfers. * * @return The receive buffer size. * * @exception SocketException If an error occurs or Socket is not connected * * @since 1.2 */ public int getReceiveBufferSize () throws SocketException { if (impl == null) throw new SocketException("Not connected"); Object buf = impl.getOption(SocketOptions.SO_RCVBUF); if (buf instanceof Integer) return(((Integer)buf).intValue()); else throw new SocketException("Internal Error: Unexpected type"); } /** * This method sets the value for the socket level socket option * SO_KEEPALIVE. * * @param on True if SO_KEEPALIVE should be enabled * * @exception SocketException If an error occurs or Socket is not connected * * @since 1.3 */ public void setKeepAlive (boolean on) throws SocketException { if (impl == null) throw new SocketException("Not connected"); impl.setOption(SocketOptions.SO_KEEPALIVE, new Boolean(on)); } /** * This method returns the value of the socket level socket option * SO_KEEPALIVE. * * @return The setting * * @exception SocketException If an error occurs or Socket is not connected * * @since 1.3 */ public boolean getKeepAlive () throws SocketException { if (impl == null) throw new SocketException("Not connected"); Object buf = impl.getOption(SocketOptions.SO_KEEPALIVE); if (buf instanceof Boolean) return(((Boolean)buf).booleanValue()); else throw new SocketException("Internal Error: Unexpected type"); } /** * Closes the socket. * * @exception IOException If an error occurs */ public synchronized void close () throws IOException { if (impl != null) impl.close(); if (ch != null) ch.close(); closed = true; } /** * Converts this <code>Socket</code> to a <code>String</code>. * * @return The <code>String</code> representation of this <code>Socket</code> */ public String toString () { return("Socket " + impl); } // Class Methods /** * Sets the <code>SocketImplFactory</code>. This may be done only once per * virtual machine. Subsequent attempts will generate a * <code>SocketException</code>. Note that a <code>SecurityManager</code> * check is made prior to setting the factory. If * insufficient privileges exist to set the factory, then an * <code>IOException</code> will be thrown. * * @exception SecurityException If the <code>SecurityManager</code> does * not allow this operation. * @exception SocketException If the SocketImplFactory is already defined * @exception IOException If any other error occurs */ public static synchronized void setSocketImplFactory (SocketImplFactory fac) throws IOException { // See if already set if (factory != null) throw new SocketException("SocketImplFactory already defined"); // Check permissions SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkSetFactory(); if (fac == null) throw new SocketException("SocketImplFactory cannot be null"); factory = fac; } /** * Closes the input side of the socket stream. * * @exception IOException If an error occurs. * * @since 1.3 */ public void shutdownInput() throws IOException { if (impl != null) impl.shutdownInput(); inputShutdown = true; } /** * Closes the output side of the socket stream. * * @exception IOException If an error occurs. * * @since 1.3 */ public void shutdownOutput() throws IOException { if (impl != null) impl.shutdownOutput(); outputShutdown = true; } /** * Returns the socket channel associated with this socket. * * It returns null if no associated socket exists. * * @since 1.4 */ public SocketChannel getChannel() { return ch; } /** * Checks if the SO_REUSEADDR option is enabled * * @exception SocketException If an error occurs * * @since 1.4 */ public boolean getReuseAddress () throws SocketException { if (impl == null) throw new SocketException ("Cannot initialize Socket implementation"); Object reuseaddr = impl.getOption (SocketOptions.SO_REUSEADDR); if (!(reuseaddr instanceof Boolean)) throw new SocketException ("Internal Error"); return ((Boolean) reuseaddr).booleanValue (); } /** * Enables/Disables the SO_REUSEADDR option * * @exception SocketException If an error occurs * * @since 1.4 */ public void setReuseAddress (boolean on) throws SocketException { if (impl == null) throw new SocketException ("Cannot initialize Socket implementation"); impl.setOption (SocketOptions.SO_REUSEADDR, new Boolean (on)); } /** * Returns the current traffic class * * @exception SocketException If an error occurs * * @see Socket:setTrafficClass * * @since 1.4 */ public int getTrafficClass () throws SocketException { if (impl == null) throw new SocketException ("Cannot initialize Socket implementation"); Object obj = impl.getOption(SocketOptions.IP_TOS); if (obj instanceof Integer) return ((Integer) obj).intValue (); else throw new SocketException ("Unexpected type"); } /** * Sets the traffic class value * * @param tc The traffic class * * @exception SocketException If an error occurs * @exception IllegalArgumentException If tc value is illegal * * @see Socket:getTrafficClass * * @since 1.4 */ public void setTrafficClass (int tc) throws SocketException { if (impl == null) throw new SocketException ("Cannot initialize Socket implementation"); if (tc < 0 || tc > 255) throw new IllegalArgumentException(); impl.setOption (SocketOptions.IP_TOS, new Integer (tc)); } /** * Checks if the socket is connected * * @since 1.4 */ public boolean isConnected () { return impl.getInetAddress () != null; } /** * Checks if the socket is already bound. * * @since 1.4 */ public boolean isBound () { return getLocalAddress () != null; } /** * Checks if the socket is closed. * * @since 1.4 */ public boolean isClosed () { return closed; } /** * Checks if the socket's input stream is shutdown * * @since 1.4 */ public boolean isInputShutdown () { return inputShutdown; } /** * Checks if the socket's output stream is shutdown * * @since 1.4 */ public boolean isOutputShutdown () { return outputShutdown; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -