當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。