当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.net.Socket用法及代码示例


java.net.Socket 类允许我们创建套接字对象,帮助我们实现所有基本的套接字操作。我们可以执行各种网络操作,例如发送、读取数据和关闭连接。使用 java.net.Socket 类创建的每个 Socket 对象都与 1 个远程主机精确关联,为了连接到另一个不同的主机,我们必须创建一个新的套接字对象。

从 java.net 包导入 Socket 类的语法:

import java.net.Socket;

Socket类中使用的方法:

方法 说明
bind(SocketAddress bindpoint) 该方法用于将套接字绑定到本地地址。
Close() 该方法用于终止套接字。
connect(SocketAddress endpoint) 该方法用于将套接字连接到服务器。
getChannel() 此方法返回与套接字关联的对象(如果有)。
getInetAddress() 此方法返回套接字连接到的地址。
getInputStream() 此方法返回套接字的输入流。
getKeepAlive() 该方法用于检查SO_KEEPALIVE是否启用。
getLocalAddress() 该方法用于获取套接字绑定的本地地址。
getLocalPort() 此方法返回套接字绑定到的本地地址。
getLocalSocketAddress() 此方法返回绑定套接字的端点。
getOOBInline() 此方法检查SO_OOBINLINE是否已启用。
getOutputStream() 此方法返回套接字的输出流。
getPort() 此方法返回与套接字关联的远程端口号。
getReceiveBufferSize() 该方法用于获取套接字的SO_RCVBUF选项的值,该值是平台在套接字上用作输入的缓冲区大小。
getRemoteSocketAddress() 此方法返回套接字端点的地址,如果未连接,则返回 null。
getReuseAddress() 此方法检查REUSE_ADDR是否已启用。
getSendBufferSize() 该方法用于获取套接字的SO_SNDBUF选项的值,该值用作平台在套接字上输出的缓冲区大小。
getSoLinger() 此方法返回SO_LINGER的设置
getSoTimeout() 此方法返回 S0_TIMEOUT 的设置
getTcpNoDelay() 该方法用于测试TCP_NODELAY是否启用。
getTrafficClass() 此方法获取从此套接字发送的数据包的 IP 标头中的流量类别或type-of-service。
isBound() 该方法返回套接字的绑定状态
isClosed() 该方法返回套接字的关闭状态。
isConnected() 该方法返回套接字的连接状态。
isInputShutdown() 该方法返回socket连接的read-half是否关闭
isOutputShutdown() 该方法返回套接字连接的write-half是否关闭。
sendUrgentData(int data) 该方法在socket上发送一字节的紧急数据
setKeepAlive(boolean on) 此方法启用/禁用SO_KEEPALIVE
setOOBInline(boolean on) 此方法启用/禁用 SO_OOBINLINE(TCP 紧急数据的接收) 默认情况下,此选项被禁用,并且在套接字上接收到的 TCP 紧急数据将被静默丢弃。
setPerformancePreferences(int connectionTime, int latency, int bandwidth) 此方法设置此套接字的性能首选项。
setReceiveBufferSize(int 大小) 此方法将 SO_RCVBUF 选项设置为此套接字的指定值。
setReuseAddress(布尔值 此方法启用/禁用 SO_REUSEADDR 套接字选项
setSendBufferSize(int size) 此方法将此 Socket 的 SO_SNDBUF 选项设置为指定值
setSocketImplFactory(SocketImplFactory fac 此方法为应用程序设置客户端套接字实现工厂。
setSoLinger(boolean on, int linger) 此方法以指定的停留时间(以秒为单位)启用/禁用SO_LINGER。
setSoTimeout(int timeout) 此方法以指定的超时(以毫秒为单位)启用/禁用SO_TIMEOUT。
setTcpNoDelay(布尔值 此方法启用/禁用TCP_NODELAY(禁用/启用 Nagle 算法)。
setTrafficClass(int tc) 此方法为从此套接字发送的数据包设置 IP 标头中的流量类别或 type-of-service 八位字节。
shutdownInput() 此方法将此套接字的输入流放置在“end of stream”处。
toString() 该方法将 Socket 转换为字符串。

Socket类的应用:

1. Socket类的实现是创建一个流套接字,并连接到指定的端口号和端口地址。

public Socket(InetAddress address, int port)

2. Socket类用于创建socket并连接javax.net中指定远程端口上的指定远程地址

    SocketFactory.createSocket(InetAddress address, int port, InetAddress localAddress, int localPort)

3. 在 javax.ssl.net 中,Socket 类用于返回一个套接字,该套接字位于连接到给定端口上的指定主机的现有套接字之上。

SSLSocketFactory.createSocket(Socket s, String host, int port, boolean autoClose)

4. 在javax.rmi.ssl中,Socket类用于创建SSL套接字。

SslRMIClientSocketFactory.createSocket(String host, int port)

5. 在java.nio.channels中,Socket类用于检索与其通道关联的套接字

SocketChannel.socket()

Socket 类实现的 Java 示例:

1. 对于服务器端:

Java


import java.io.*; 
import java.net.*; 
public class MyServer { 
    public static void main(String[] args) 
    { 
        try { 
            ServerSocket ss = new ServerSocket(6666); 
            
            // establishes connection 
            Socket soc = ss.accept(); 
            
            // invoking input stream 
            DataInputStream dis = new DataInputStream(ss.getInputStream()); 
            
            String str = (String)dis.readUTF(); 
            
            System.out.println("message= " + str); 
            
            // closing socket 
            ss.close(); 
            
        } // for catching Exception in run time 
        catch (Exception e) { 
            System.out.println(e); 
        } 
    } 
}

客户端输出:

2. 对于客户端:

Java


import java.io.*; 
import java.net.*; 
public class MyClient { 
    public static void main(String[] args) 
    { 
        try { 
            
            // initializing Socket 
            Socket soc = new Socket("localhost", 6666); 
            
            DataOutputStream d = new DataOutputStream( 
                soc.getOutputStream()); 
            
            // message to display 
            d.writeUTF("Hello GFG Readers!");          
         
            d.flush(); 
            
            // closing DataOutputStream 
            d.close(); 
            
            // closing socket 
            soc.close(); 
        } 
        
        // to initialize Exception in run time 
        catch (Exception e) { 
            System.out.println(e); 
        } 
    } 
}

服务器上的输出:



相关用法


注:本文由纯净天空筛选整理自ravi.geek24大神的英文原创作品 java.net.Socket Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。