0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何找到連接到服務(wù)器的客戶端計算機的IP地址

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 11:37 ? 次閱讀

在本文中,我們來學(xué)習(xí)下如何找到連接到服務(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實例包含了遠(yuǎn)程客戶端的套接字地址。我們可以使用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ā)生了什么?

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

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

總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7168

    瀏覽量

    87142
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8696

    瀏覽量

    84524
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104084
  • ip地址
    +關(guān)注

    關(guān)注

    0

    文章

    284

    瀏覽量

    16911
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3198

    瀏覽量

    57356
收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于labview服務(wù)器客戶端程序移植到另一臺電腦的問題

    本帖最后由 hunterlew 于 2015-3-9 21:54 編輯 各位路過大神,我有個這樣的疑問:今天我在計算機A上同時寫了服務(wù)器客戶端程序(共享變量的方法),測試正常后把服務(wù)器
    發(fā)表于 02-08 18:14

    Intel Unite:無法將客戶端連接到Unite服務(wù)器

    我無法將客戶端連接到Intel unite服務(wù)器。我繞過了證書檢查和安裝服務(wù)器,服務(wù)器正在運行并生成PIN。但是,當(dāng)我將
    發(fā)表于 11-09 11:20

    為什么我用labview編寫的服務(wù)器只可以連接本機的客戶端

    為什么我用labview編寫的服務(wù)器只可以連接本機的客戶端,創(chuàng)建TCP偵聽的端口明明和別的計算機客戶端端口一樣可就是連不上
    發(fā)表于 03-11 20:46

    兩個STM32服務(wù)器如何連接客戶端的stm32?

    通信如圖所示。三個stm32是在一個板子上的,wifi 為esp8266模塊。兩個stm32做服務(wù)器和一個做客戶端。內(nèi)部通信用tcp/ip?,F(xiàn)在有幾個疑問:1.上位機通過路由,把命令給有WIFI通信
    發(fā)表于 05-13 03:23

    PIC24+ENC28J60同時客戶端服務(wù)器

    )工作,另一個模塊將作為客戶端連接到這個enc_IP&Port2。任何人都可以幫助我實現(xiàn)這個設(shè)置以充當(dāng)服務(wù)器來監(jiān)聽連接和操作&作為
    發(fā)表于 03-26 11:18

    DHCP客戶端如何將主機名發(fā)送到服務(wù)器?

    有沒有人知道,如果DHCP客戶端和諧,可以將設(shè)備的主機名返回DNS服務(wù)器。我很感激服務(wù)器在許多情況下把主機名發(fā)送給客戶端。應(yīng)用程序是當(dāng)你第一次將設(shè)備插入網(wǎng)絡(luò)并從DHCP獲得
    發(fā)表于 05-01 06:44

    求助:labview 關(guān)于TCP通訊,如何讓客戶端以指定的IP地址連接服務(wù)器

    `計算機上有2個以上的IP地址,用LABVIEW編寫TCP通訊 客戶端程序時,怎么給客戶端指定一個IP
    發(fā)表于 03-16 16:47

    如何將ESP8266與Windows計算機上運行的tcp套接字服務(wù)器程序連接

    我正在嘗試將 ESP8266 與在我的 Windows 計算機上運行的 tcp 套接字服務(wù)器程序連接,我開發(fā)了一個 C# 應(yīng)用程序運行并列出到 IP 172.16.1.85 端口 65
    發(fā)表于 02-23 07:09

    如何創(chuàng)建客戶端連接到服務(wù)器的網(wǎng)狀網(wǎng)絡(luò)?

    的問題是:如何創(chuàng)建客戶端連接到服務(wù)器的網(wǎng)狀網(wǎng)絡(luò)(或者服務(wù)器將多次提供與網(wǎng)狀的連接)有任何想法嗎?我錯過了什么?是否有應(yīng)該唯一的
    發(fā)表于 03-02 07:54

    計算機客戶端服務(wù)器

    計算機客戶端服務(wù)器 一般說來,互聯(lián)網(wǎng)上的所有計算機可以分成兩種類型:服務(wù)器客戶端。向其他
    發(fā)表于 08-05 08:57 ?1775次閱讀

    客戶端服務(wù)器和網(wǎng)絡(luò)技術(shù)

    基于服務(wù)器計算代表著一種應(yīng)用程序部署方法。 對以下基于服務(wù)器計算環(huán)境而言,瘦客戶端是理想的客戶端
    發(fā)表于 07-02 16:46 ?17次下載
    瘦<b class='flag-5'>客戶端</b>的<b class='flag-5'>服務(wù)器</b>和網(wǎng)絡(luò)技術(shù)

    根據(jù)客戶端IP地址獲取計算機名_Delphi教程

    Delphi教程根據(jù)客戶端IP地址獲取計算機名,很好的Delphi學(xué)習(xí)資料。
    發(fā)表于 03-16 14:54 ?10次下載

    TCP通信服務(wù)器端客戶端同機互傳的簡單示例程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是TCP通信服務(wù)器端客戶端同機互傳的簡單示例程序免費下載初學(xué)者學(xué)習(xí)。本例子是本計算機labview程序之間的通信,如果要想實現(xiàn)計算機
    發(fā)表于 10-25 08:00 ?9次下載
    TCP通信<b class='flag-5'>服務(wù)器端</b>和<b class='flag-5'>客戶端</b>同機互傳的簡單示例程序免費下載

    STM32+LWIP服務(wù)器實現(xiàn)多客戶端連接

    用過正點原子LWIP服務(wù)器例程開發(fā)的朋友可能知道,例程的設(shè)計是只支持一個客戶端連接的,但實際應(yīng)用中往往需要用到多客戶端連接。下面是在正點原子
    發(fā)表于 12-23 19:59 ?59次下載
    STM32+LWIP<b class='flag-5'>服務(wù)器</b>實現(xiàn)多<b class='flag-5'>客戶端</b><b class='flag-5'>連接</b>

    數(shù)據(jù)是怎么樣保證準(zhǔn)確的從客戶端發(fā)送到服務(wù)器端

    你有想過嗎,在計算機網(wǎng)絡(luò)當(dāng)中,數(shù)據(jù)是怎么樣保證準(zhǔn)確的從客戶端發(fā)送到服務(wù)器端的?中間涉及到了哪些理論?
    的頭像 發(fā)表于 07-01 10:09 ?1843次閱讀