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


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


ServerSocket 类用于提供客户端/服务器套接字连接的服务器端的系统独立实现。如果 ServerSocket 的构造函数无法侦听指定端口(例如,该端口已被使用),则会引发异常。

它的应用非常广泛,所以java.net.ServerSocket类的应用如下:

  1. 在java.nio通道中,ServerSocket类用于检索与该通道关联的serverSocket。
  2. 在java.rmi.Server中,ServerSocket类用于在指定端口(端口0表示匿名端口)上创建服务器套接字。
  3. 在javax.net中,服务器套接字被广泛使用,以便:
    • 返回未绑定的服务器套接字。
    • 返回绑定到指定端口的服务器套接字。
    • 返回绑定到指定端口的服务器套接字,并使用指定的连接积压。
    • 返回绑定到指定端口的服务器套接字,具有指定的侦听积压和本地 IP。

让我们来看看这个类的方法如下:

方法 说明
accept() 侦听与此套接字建立的连接并接受它。
bind(SocketAddress endpoint) 将 ServerSocket 绑定到特定地址(IP 地址和端口号)。
绑定(SocketAddress端点,int积压) 将 ServerSocket 绑定到特定地址(IP 地址和端口号)并请求队列长度。如果请求在队列已满时到达,则该请求将被服务器拒绝。
close() 关闭此套接字
getChannel() 返回与此套接字关联的唯一ServerSocketChannel 对象(如果有)。
getInetAddress() 返回此服务器套接字的本地地址。
getLocalPort() 返回此套接字正在侦听的端口号。
getLocalSocketAddress() 返回此套接字绑定到的端点的地址,如果尚未绑定,则返回 null。
getReceiveBufferSize() 获取此 ServerSocket 的 SO_RCVBUF 选项的值,即用于从此 ServerSocket 接受的套接字的建议缓冲区大小。
getReuseAddress() 测试是否启用SO_REUSEADDR。
getSoTimeout() 检索SO_TIMEOUT的设置。
implAccept(Socket s) ServerSocket 的子类使用此方法覆盖 accept() 以返回它们自己的子类 插座。
isBound() 返回 ServerSocket 的绑定状态。
isClosed() 返回 ServerSocket 的关闭状态。
setPerformancePreferences(int connectionTime, int latency, int bandwidth) 为此ServerSocket 设置性能首选项
为此ServerSocket 设置性能首选项 为从此 ServerSocket 接受的套接字设置 SO_RCVBUF 选项的默认建议值。
setReuseAddress(boolean on) 启用/禁用 SO_REUSEADDR 套接字选项。
setSocketFactory(SocketImplFactory fac) 设置应用程序的服务器套接字实现工厂。
setSoTimeout(int timeout) 使用指定的超时(以毫秒为单位)启用/禁用SO_TIMEOUT。
toString() 以字符串形式返回此套接字的实现地址和实现端口。

implementation:

示例 1服务器端

Java


// Java Program to implement ServerSocket class
// Server Side
// Importing required libraries
import java.io.*;
import java.net.*;
// Main class
public class MyServer {
    // Main driver method
    public static void main(String[] args)
    {
        // Try block to check for exceptions
        try {
            // Creating an object of ServerSocket class
            // in the main() method  for socket connection
            ServerSocket ss = new ServerSocket(6666);
            // Establishing a connection
            Socket soc = ss.accept();
            // Invoking input stream via getInputStream()
            // method by creating DataInputStream class
            // object
            DataInputStream dis
                = new DataInputStream(soc.getInputStream());
            String str = (String)dis.readUTF();
            // Display the string on the console
            System.out.println("message= " + str);
            // Lastly close the socket using standard close
            // method to release memory resources
            ss.close();
        }
        // Catch block to handle the exceptions
        catch (Exception e) {
            // Display the exception on the console
            System.out.println(e);
        }
    }
}

输出:

示例 2客户端

Java


// Java Program to implement ServerSocket class
// Client - side
// Importing required libraries
import java.io.*;
import java.net.*;
// Main class
public class MyClient {
    // Main driver method
    public static void main(String[] args)
    {
        // Try block to check if exception occurs
        try {
            // Creating Socket class object and
            // initializing Socket
            Socket soc = new Socket("localhost", 6666);
            DataOutputStream d = new DataOutputStream(
                soc.getOutputStream());
            // Message to be displayed
            d.writeUTF("Hello GFG Readers!");
            // Flushing out internal buffers,
            // optimizing for better performance
            d.flush();
            // Closing the connections
            // Closing DataOutputStream
            d.close();
            // Closing socket
            soc.close();
        }
        // Catch block to handle exceptions
        catch (Exception e) {
            // Print the exception on the console
            System.out.println(e);
        }
    }
}

输出:



相关用法


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