最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java利用Socket類實現(xiàn)TCP通信程序

 更新時間:2024年02月29日 15:44:57   作者:VincentHu_  
TCP通信能實現(xiàn)兩臺計算機(jī)之間的數(shù)據(jù)交互,通信的兩端,要嚴(yán)格區(qū)分為客戶端與服務(wù)端,下面我們就來看看Java如何利用Socket類實現(xiàn)TCP通信程序吧

TCP通信能實現(xiàn)兩臺計算機(jī)之間的數(shù)據(jù)交互,通信的兩端,要嚴(yán)格區(qū)分為客戶端(Client)與服務(wù)端(Server)。

兩端通信時步驟:

  • 服務(wù)端程序需要先啟動,等待客戶端的連接。
  • 客戶端主動連接服務(wù)器端,連接成功才能通信。服務(wù)端不可以主動連接客戶端。

在Java中,提供了兩個類用于實現(xiàn)TCP通信程序:

客戶端:java.net.Socket類表示。創(chuàng)建Socket對象,向服務(wù)端發(fā)出連接請求,服務(wù)端響應(yīng)請求,兩者建立連接開始通信。

服務(wù)端:java.net.ServerSocket類表示。創(chuàng)建ServerSocket對象,相當(dāng)于開啟一個服務(wù),并等待客戶端的連接。

InetAddress類

這個類代表一個互聯(lián)網(wǎng)協(xié)議(IP)地址。

常用方法

  • static InetAddress getLocalHost():返回本地主機(jī)的地址。
  • static InetAddress getByName(String host):根據(jù)主機(jī)名獲取主機(jī)信息。
  • String getHostAddress():根據(jù)InetAddress對象獲取ip地址。
  • String getHostName():根據(jù)InetAddress對象獲取主機(jī)名。
public static void main(String[] args) throws UnknownHostException {
    // 獲取本機(jī)的InetAddress對象
    InetAddress localHost = InetAddress.getLocalHost();
    System.out.println(localHost);
    // 根據(jù)本機(jī)的主機(jī)名獲取InetAddress對象
    InetAddress host = InetAddress.getByName("DESKTOP-3G22U7M");
    System.out.println(host);
    // 根據(jù)域名獲取InetAddress對象
    InetAddress host2 = InetAddress.getByName("www.baidu.com");
    System.out.println(host2);
    // 根據(jù)InetAddress對象獲取ip地址
    String hostAddress = host2.getHostAddress();
    System.out.println(hostAddress);
    // 根據(jù)InetAddress對象獲取主機(jī)名
    String hostName = host2.getHostName();
    System.out.println(hostName);
}

Socket類

java.net.Socket類實現(xiàn)客戶端套接字(也可以就叫“套接字”)。該類實現(xiàn)客戶端套接字,套接字指的是兩臺設(shè)備之間通訊的端點。

Socket允許程序把網(wǎng)絡(luò)連接當(dāng)成一個流,數(shù)據(jù)在兩個Socket間通過IO傳輸。

構(gòu)造方法

public Socket(String host, int port):創(chuàng)建套接字對象并將其連接到指定主機(jī)上的指定端口號。如果指定的host是null ,則相當(dāng)于指定地址為回送地址。

String host:服務(wù)器主機(jī)的名稱/服務(wù)器的IP地址。

int port:服務(wù)器的端口號。

Socket client = new Socket("127.0.0.1", 6666);

回送地址(127.x.x.x) 是本機(jī)回送地址(Loopback Address),主要用于網(wǎng)絡(luò)軟件測試以及本地機(jī)進(jìn)程間通信,無論什么程序,一旦使用回送地址發(fā)送數(shù)據(jù),立即返回,不進(jìn)行任何網(wǎng)絡(luò)傳輸。

常用方法

public InputStream getInputStream():返回此套接字的輸入流。

如果此Scoket具有相關(guān)聯(lián)的通道,則生成的InputStream 的所有操作也關(guān)聯(lián)該通道。

關(guān)閉生成的InputStream也將關(guān)閉相關(guān)的Socket。

public OutputStream getOutputStream(): 返回此套接字的輸出流。

如果此Scoket具有相關(guān)聯(lián)的通道,則生成的OutputStream 的所有操作也關(guān)聯(lián)該通道。

關(guān)閉生成的OutputStream也將關(guān)閉相關(guān)的Socket。

public void close():關(guān)閉此套接字。

一旦一個socket被關(guān)閉,它不可再使用。

關(guān)閉此socket也將關(guān)閉相關(guān)的InputStream和OutputStream 。

public void shutdownOutput(): 禁用此套接字的輸出流。

任何先前寫出的數(shù)據(jù)將被發(fā)送,隨后終止輸出流。

ServerSocket類

java.net.ServerSocket類:這個類實現(xiàn)了服務(wù)器套接字,該對象等待通過網(wǎng)絡(luò)的請求。

構(gòu)造方法

public ServerSocket(int port):使用該構(gòu)造方法在創(chuàng)建ServerSocket對象時,就可以將其綁定到一個指定的端口號上,參數(shù)port就是端口號。

ServerSocket server = new ServerSocket(6666);

常用方法

public Socket accept():偵聽并接受連接,返回一個新的Socket對象,用于和客戶端實現(xiàn)通信。該方法會一直阻塞直到建立連接。

TCP網(wǎng)絡(luò)程序

TCP通信分析

【服務(wù)端】啟動,創(chuàng)建ServerSocket對象,等待連接。

【客戶端】啟動,創(chuàng)建Socket對象,請求連接。

【服務(wù)端】接收連接,調(diào)用accept方法,并返回一個Socket對象。

【客戶端】Socket對象,獲取OutputStream,向服務(wù)端寫出數(shù)據(jù)。

【服務(wù)端】Scoket對象,獲取InputStream,讀取客戶端發(fā)送的數(shù)據(jù)。

到此,客戶端向服務(wù)端發(fā)送數(shù)據(jù)成功。

【服務(wù)端】Socket對象,獲取OutputStream,向客戶端回寫數(shù)據(jù)。

【客戶端】Scoket對象,獲取InputStream,解析回寫數(shù)據(jù)。

【客戶端】釋放資源,斷開連接。

自此,服務(wù)端向客戶端回寫數(shù)據(jù)。

服務(wù)端實現(xiàn)

public class ServerTCP {
    public static void main(String[] args) throws IOException {
    System.out.println("服務(wù)端啟動 , 等待連接 .... ");
        // 1.創(chuàng)建 ServerSocket對象,綁定端口,開始等待連接
        ServerSocket ss = new ServerSocket(6666);
        // 2.接收連接 accept 方法, 返回 socket 對象.
        Socket server = ss.accept();
        // 3.通過socket 獲取輸入流
        InputStream is = server.getInputStream();
        // 4.一次性讀取數(shù)據(jù)
        // 4.1 創(chuàng)建字節(jié)數(shù)組
        byte[] b = new byte[1024];
        // 4.2 據(jù)讀取到字節(jié)數(shù)組中.
        int len = is.read(b);
        // 4.3 解析數(shù)組,打印字符串信息
        String msg = new String(b, 0, len);
        System.out.println(msg);
        // =================回寫數(shù)據(jù)=======================
        // 5. 通過 socket 獲取輸出流
        OutputStream out = server.getOutputStream();
        // 6. 回寫數(shù)據(jù)
        out.write("我很好,謝謝你".getBytes());
        // 7.關(guān)閉資源.
        out.close();
        is.close();
        server.close();
    }
}

客戶端實現(xiàn)

public class ClientTCP {
    public static void main(String[] args) throws Exception {
        System.out.println("客戶端 發(fā)送數(shù)據(jù)");
        // 1.創(chuàng)建 Socket ( ip , port ) , 確定連接到哪里.
        Socket client = new Socket("localhost", 6666);
        // 2.通過Scoket,獲取輸出流對象 
        OutputStream os = client.getOutputStream();
        // 3.寫出數(shù)據(jù).
        os.write("你好么? tcp ,我來了".getBytes());
        // ==============解析回寫=========================
        // 4. 通過Scoket,獲取 輸入流對象
        InputStream in = client.getInputStream();
        // 5. 讀取數(shù)據(jù)數(shù)據(jù)
        byte[] b = new byte[100];
        int len = in.read(b);
        System.out.println(new String(b, 0, len));
    // 6. 關(guān)閉資源 .
       in.close();
        os.close();
        client.close();
    }
}

到此這篇關(guān)于Java利用Socket類實現(xiàn)TCP通信程序的文章就介紹到這了,更多相關(guān)Java TCP通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java字符串split使用方法代碼實例

    Java字符串split使用方法代碼實例

    這篇文章主要介紹了Java字符串split使用方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java?Jenkins、Dockers和Kubernetes有什么區(qū)別詳細(xì)總結(jié)

    Java?Jenkins、Dockers和Kubernetes有什么區(qū)別詳細(xì)總結(jié)

    這篇文章主要介紹了Java?Jenkins、Dockers和Kubernetes有什么區(qū)別的相關(guān)資料,Jenkins、Docker和Kubernetes分別在自動化流程、容器化封裝與容器編排三個關(guān)鍵層面發(fā)揮著重要作用,需要的朋友可以參考下
    2025-11-11
  • Java中List轉(zhuǎn)Map List實現(xiàn)的幾種姿勢

    Java中List轉(zhuǎn)Map List實現(xiàn)的幾種姿勢

    本文主要介紹了Java中List轉(zhuǎn)Map List實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 學(xué)會在Java中使用Optional功能

    學(xué)會在Java中使用Optional功能

    這篇文章主要介紹了學(xué)會在Java中使用Optional功能,在本文中,我們將了解如何、何時以及在哪里最好地應(yīng)用Optional,具體相關(guān)內(nèi)容需要的朋友可以參考下面文章內(nèi)容
    2022-09-09
  • Spring Data JPA中 in 條件參數(shù)的傳遞方式

    Spring Data JPA中 in 條件參數(shù)的傳遞方式

    這篇文章主要介紹了Spring Data JPA中 in 條件參數(shù)的傳遞方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用Maven多模塊——打包指定模塊

    使用Maven多模塊——打包指定模塊

    這篇文章主要介紹了使用Maven多模塊——打包指定模塊問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 使用SpringBoot整合高德地圖實現(xiàn)路線規(guī)劃功能

    使用SpringBoot整合高德地圖實現(xiàn)路線規(guī)劃功能

    在日常的開發(fā)項目中,地圖服務(wù)是很多系統(tǒng)的核心能力之一,尤其是在物流、同城配送、出行導(dǎo)航等領(lǐng)域,在近期的一個項目中,需要實現(xiàn)用戶下單后,系統(tǒng)需要根據(jù)起點和終點地址,自動計算推薦路徑,所以本文給大家分享了如何使用SpringBoot整合高德地圖實現(xiàn)路線規(guī)劃功能
    2025-07-07
  • 簡單了解mybatis攔截器實現(xiàn)原理及實例

    簡單了解mybatis攔截器實現(xiàn)原理及實例

    這篇文章主要介紹了簡單了解mybatis攔截器實現(xiàn)原理及實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java調(diào)用瀏覽器打開網(wǎng)頁完整實例

    Java調(diào)用瀏覽器打開網(wǎng)頁完整實例

    這篇文章主要介紹了Java調(diào)用瀏覽器打開網(wǎng)頁的方法,以完整實例形式分析了java打開網(wǎng)頁的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 一文揭秘Java內(nèi)存模型的隱匿陷阱與解決方案

    一文揭秘Java內(nèi)存模型的隱匿陷阱與解決方案

    這篇文章主要為大家詳細(xì)介紹了Java中內(nèi)存模型的隱匿陷阱與解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-06-06

最新評論

高雄市| 胶州市| 清涧县| 郧西县| 汉沽区| 义马市| 南华县| 历史| 东宁县| 富宁县| 辽宁省| 莆田市| 电白县| 博乐市| 盐山县| 兴安盟| 长岭县| 封丘县| 新余市| 民县| 泸溪县| 张掖市| 泾川县| 师宗县| 龙胜| 新竹县| 柞水县| 渭源县| 绵阳市| 南昌县| 南靖县| 屯留县| 南华县| 扶风县| 鹤峰县| 霍山县| 固阳县| 瓮安县| 公安县| 阿拉善盟| 阿勒泰市|