精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

背景

Java應用程序使用套接字在互聯網上進行通信和發送數據。Java為客戶端應用程序提供了java.net.Socket類。

java.net.ServerSocket類用于TCP/IP的服務器端套接字實現。我們平時只關注TCP/IP的應用層面。

使用示例

讓我們假設我們的系統上有一個應用服務器在運行。這個服務器向客戶發送問候信息。在這種情況下,服務器使用一個TCP套接字進行通信。

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

應用例子

現在我們已經定義了我們的用例,讓我們開始構建服務器。

應用服務器

首先,我們需要實例化一個ServerSocket,用于監聽進入的連接請求。ServerSocket類的構造函數需要一個端口號作為參數

public class ApplicationServer {

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

獲取客戶端的IP地址

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

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

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

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

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

向客戶端發送消息

現在,服務器和客戶端可以交換問候信息。

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

測試應用程序

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

建立一個客戶端應用程序

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

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

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

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

運行應用程序

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

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

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

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

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

IP address of the connected client: 192.168.0.102

在后臺發生了什么?

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

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

總結

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7430

    瀏覽量

    87733
  • 服務器
    +關注

    關注

    12

    文章

    9029

    瀏覽量

    85205
  • JAVA
    +關注

    關注

    19

    文章

    2960

    瀏覽量

    104562
  • ip地址
    +關注

    關注

    0

    文章

    295

    瀏覽量

    17009
  • 應用程序
    +關注

    關注

    37

    文章

    3245

    瀏覽量

    57614
收藏 人收藏

    評論

    相關推薦

    關于labview服務器客戶端程序移植到另一臺電腦的問題

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

    Intel Unite:無法將客戶端連接到Unite服務器

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

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

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

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

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

    PIC24+ENC28J60同時客戶端服務器

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

    DHCP客戶端如何將主機名發送到服務器

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

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

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

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

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

    如何創建客戶端連接到服務器的網狀網絡?

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

    計算機客戶端服務器

    計算機客戶端服務器 一般說來,互聯網上的所有計算機可以分成兩種類型:服務器客戶端。向其他
    發表于 08-05 08:57 ?1838次閱讀

    客戶端服務器和網絡技術

    基于服務器計算代表著一種應用程序部署方法。 對以下基于服務器計算環境而言,瘦客戶端是理想的客戶端
    發表于 07-02 16:46 ?17次下載
    瘦<b class='flag-5'>客戶端</b>的<b class='flag-5'>服務器</b>和網絡技術

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

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

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

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

    STM32+LWIP服務器實現多客戶端連接

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

    數據是怎么樣保證準確的從客戶端發送到服務器端

    你有想過嗎,在計算機網絡當中,數據是怎么樣保證準確的從客戶端發送到服務器端的?中間涉及到了哪些理論?
    的頭像 發表于 07-01 10:09 ?2010次閱讀