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

詳解Java如何通過Socket實現(xiàn)查詢IP

 更新時間:2022年10月10日 08:40:54   作者:指北君  
在本文中,我們來學習下如何找到連接到服務(wù)器的客戶端計算機的IP地址。我們將創(chuàng)建一個簡單的客戶端-服務(wù)器場景,讓我們探索用于TCP/IP通信的java.net?API,感興趣的可以了解一下

在本文中,我們來學習下如何找到連接到服務(wù)器的客戶端計算機的IP地址。我們將創(chuàng)建一個簡單的客戶端-服務(wù)器場景,讓我們探索用于TCP/IP通信的java.net API。

背景

Java應(yīng)用程序使用套接字在互聯(lián)網(wǎng)上進行通信和發(fā)送數(shù)據(jù)。Java為客戶端應(yīng)用程序提供了java.net.Socket類。

java.net.ServerSocket類用于TCP/IP的服務(wù)器端套接字實現(xiàn)。我們平時只關(guān)注TCP/IP的應(yīng)用層面。

使用示例

讓我們假設(shè)我們的系統(tǒng)上有一個應(yīng)用服務(wù)器在運行。這個服務(wù)器向客戶發(fā)送問候信息。在這種情況下,服務(wù)器使用一個TCP套接字進行通信。

該應(yīng)用服務(wù)器被綁定到一個特定的TCP端口。它的套接字地址是該端口和本地網(wǎng)絡(luò)接口的IP地址的組合。由于這個原因,客戶應(yīng)該使用這個特定的套接字地址來連接服務(wù)器。

應(yīng)用例子

現(xiàn)在我們已經(jīng)定義了我們的用例,讓我們開始構(gòu)建服務(wù)器。

應(yīng)用服務(wù)器

首先,我們需要實例化一個ServerSocket,用于監(jiān)聽進入的連接請求。ServerSocket類的構(gòu)造函數(shù)需要一個端口號作為參數(shù)。

public?class?ApplicationServer?{

????private?ServerSocket?serverSocket;
????private?Socket?connectedSocket;
??
????public?void?startServer(int?port)?throws?IOException?{
????????serverSocket?=?new?ServerSocket(port);
????????connectedSocket?=?serverSocket.accept();
????????//...

獲取客戶端的IP地址

現(xiàn)在我們已經(jīng)為進入的客戶端建立了Socket,讓我們看看如何獲得客戶端的IP地址。Socket實例包含了遠程客戶端的套接字地址。我們可以使用getRemoteSocketAddress方法來檢查這個。

ThegetRemoteSocketAddress方法返回一個類型為SocketAddress的對象。這是一個抽象的Java類。在這個例子中,我們知道它是一個TCP/IP連接,所以我們可以把它轉(zhuǎn)換為InetSocketAddress

InetSocketAddress?socketAddress?=?(InetSocketAddress)?connectedSocket.getRemoteSocketAddress();

正如我們已經(jīng)看到的,一個套接字地址是一個IP地址和端口號的組合。我們可以使用getAddress來獲得IP地址。這返回一個InetAddress對象。然而,我們也可以使用getHostAddress來獲得IP地址的字符串表示。

String?clientIpAddress?=?socketAddress.getAddress()
????.getHostAddress();

向客戶端發(fā)送消息

現(xiàn)在,服務(wù)器和客戶端可以交換問候信息。

String?msg?=?in.readLine();
System.out.println("Message?received?from?the?client?:?"?+?msg);
PrintWriter?out?=?new?PrintWriter(connectedSocket.getOutputStream(),?true);
out.println("Hello?Client?!!");

測試應(yīng)用程序

現(xiàn)在讓我們建立一個客戶端應(yīng)用程序來測試我們的代碼。這個客戶端將在一個單獨的計算機上運行并連接到我們的服務(wù)器。

建立一個客戶端應(yīng)用程序

首先,我們需要使用IP地址和端口號與服務(wù)建立一個Socket連接。

public?class?ApplicationClient?{
????public?void?connect(String?ip,?int?port)?throws?IOException?{
????????clientSocket?=?new?Socket(ip,?port);
????}
}

與服務(wù)器應(yīng)用程序類似,我們將使用BufferedReaderPrintWriter來從套接字中讀取和寫入。為了向服務(wù)器發(fā)送消息,讓我們創(chuàng)建一個方法來向連接的套接字寫入。

public?void?sendGreetings(String?msg)?throws?IOException?{
????out.println(msg);
????String?reply?=?in.readLine();
????System.out.println("Reply?received?from?the?server?:"?+?reply);
}

運行應(yīng)用程序

接下來,讓我們運行客戶端應(yīng)用程序,為它選擇一個不常用的端口

之后,我們需要從另一臺電腦上啟動客戶端應(yīng)用程序。在這個例子中,我們假設(shè)服務(wù)器機器的IP地址是192.168.0.100,端口5000是不常用的,不會影響其他的服務(wù)。

java?-cp?com.javanorth.clientaddress.ApplicationClient?192.168.0.100?5000?Hello

這里,我們假設(shè)客戶機和服務(wù)器在同一個網(wǎng)絡(luò)上。在客戶端與服務(wù)器建立成功的連接后,客戶端的IP地址將被打印在服務(wù)器控制臺。

例如,如果客戶端的IP地址是192.168.0.102,我們應(yīng)該能在控制臺中看到它。

IP address of the connected client: 192.168.0.102

在后臺發(fā)生了什么

一般來說,當應(yīng)用服務(wù)器被啟動時,ServerSocket使用給定的端口號和通配符IP地址實例化一個套接字對象。之后,它將其狀態(tài)改為監(jiān)聽,以接收連接請求。然后,當客戶端發(fā)送一個連接請求時,ServerSocket通過調(diào)用accept方法實例化一個新的套接字。

新創(chuàng)建的套接字實例包含服務(wù)器的IP地址和端口,以及遠程客戶端。對于服務(wù)器的IP地址,ServerSocket類使用本地網(wǎng)絡(luò)接口的IP地址,它通過該接口收到傳入的請求。然后,為了獲得遠程客戶端的IP地址,它對收到的TCP數(shù)據(jù)包的IP頭進行解碼并使用源地址。

總結(jié)

在這篇文章中,我們定義了一個客戶機-服務(wù)器用例,并使用Java套接字編程來查找連接到服務(wù)器的客戶機的IP地址。

以上就是詳解Java如何通過Socket實現(xiàn)查詢IP的詳細內(nèi)容,更多關(guān)于Java Socket查詢IP的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Nexus搭建Maven私服教程的方法步驟

    使用Nexus搭建Maven私服教程的方法步驟

    本文主要介紹了使用Nexus搭建Maven私服教程的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 企業(yè)級Kubernetes管理平臺Wayne功能特性介紹

    企業(yè)級Kubernetes管理平臺Wayne功能特性介紹

    這篇文章主要為大家介紹了企業(yè)級Kubernetes管理平臺Wayne的功能特性及架構(gòu)設(shè)計,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • SpringCloud筆記(Hoxton)Netflix之Ribbon負載均衡示例代碼

    SpringCloud筆記(Hoxton)Netflix之Ribbon負載均衡示例代碼

    這篇文章主要介紹了SpringCloud筆記HoxtonNetflix之Ribbon負載均衡,Ribbon是管理HTTP和TCP服務(wù)客戶端的負載均衡器,Ribbon具有一系列帶有名稱的客戶端(Named?Client),對SpringCloud?Ribbon負載均衡相關(guān)知識感興趣的朋友一起看看吧
    2022-06-06
  • Springboot+jwt實現(xiàn)在線用戶功能(示例代碼)

    Springboot+jwt實現(xiàn)在線用戶功能(示例代碼)

    這篇文章主要介紹了Springboot+jwt實現(xiàn)在線用戶功能,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • 如何改變idea和maven中的sdk版本

    如何改變idea和maven中的sdk版本

    這篇文章主要介紹了如何改變idea和maven中的sdk版本,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 詳細聊一聊java中封裝的那點事

    詳細聊一聊java中封裝的那點事

    封裝是一個非常廣泛的概念,小到一個屬性的封裝,大到一個框架或者一個項目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點事,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • springboot攔截器無法注入redisTemplate的解決方法

    springboot攔截器無法注入redisTemplate的解決方法

    在工作中我們經(jīng)常需要做登錄攔截驗證或者其他攔截認證功能,但是在寫攔截器的時候發(fā)現(xiàn)redisTemplate一直無法注入進來,本文就詳細的介紹了解決方法,感興趣的可以了解一下
    2021-06-06
  • Spring Boot Mybatis++ 2025詳解

    Spring Boot Mybatis++ 2025詳解

    文章介紹了三種基于注解SQL和查詢接口的MyBatis使用方式,討論了Entity和Example的區(qū)別,即Entity會更新所有字段,而Example僅更新非空字段,感興趣的朋友一起看看吧
    2025-02-02
  • mybatis主從表關(guān)聯(lián)查詢,返回對象帶有集合屬性解析

    mybatis主從表關(guān)聯(lián)查詢,返回對象帶有集合屬性解析

    這篇文章主要介紹了mybatis主從表關(guān)聯(lián)查詢,返回對象帶有集合屬性解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 解析java中的condition

    解析java中的condition

    Condition 將 Object 監(jiān)視器方法(wait()、notify()和notifyAll())分解成截然不同的對象,以便通過將這些對象與任意Lock實現(xiàn)組合使用,為每個對象提供多個等待 set(wait-set)
    2021-06-06

最新評論

顺昌县| 漯河市| 清水县| 贺州市| 乐亭县| 明溪县| 保康县| 万州区| 鄂温| 平果县| 前郭尔| 辽阳县| 商都县| 鄂伦春自治旗| 黄龙县| 金昌市| 德昌县| 夏邑县| 麟游县| 察隅县| 石嘴山市| 靖远县| 乐东| 金秀| 江北区| 双牌县| 屯留县| 青铜峡市| 大悟县| 本溪市| 壤塘县| 盈江县| 溆浦县| 清水县| 游戏| 乐业县| 凤山市| 亳州市| 巴青县| 大洼县| 南平市|