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


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