成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 如何通過 Socket 查詢 IP ?

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

大家好,我是指北君。

在本文中,我們來學習下如何找到連接到服務器的客戶端計算機的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);
}
}

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

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地址。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2010-03-19 10:58:48

Java Socket

2009-07-06 18:28:26

Java Socket

2012-03-19 10:55:27

JavaSocket

2021-08-04 08:55:02

Socket Java開發

2015-04-24 09:48:59

TCPsocketsocket編程

2011-07-22 17:48:29

IOS Socket TCP

2010-03-19 13:48:15

Java Socket

2012-03-19 11:41:30

JavaSocket

2015-03-18 09:21:53

編程Java死鎖

2015-03-03 13:47:34

HttpTCPIP

2010-03-19 11:12:23

Java Socket

2010-03-19 16:28:51

Java Socket

2010-03-23 17:44:10

Java Socket

2009-06-19 14:44:04

ODBCMySQL

2021-08-08 09:19:18

IPinfogaIP地址安全工具

2011-06-13 11:23:33

javasocket

2011-06-13 12:11:06

javasocket

2013-04-08 11:02:43

Socket服務C#

2024-01-18 08:37:33

socketasyncio線程

2012-02-15 13:26:39

JavaJava Socket
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文一区二区三区 | 亚洲欧美日韩精品久久亚洲区 | 91视频精选 | 日韩在线视频免费观看 | 美女激情av | 久国久产久精永久网页 | 精品毛片视频 | 天堂一区 | 日韩美香港a一级毛片免费 国产综合av | 亚洲成人av | 久久精品国产免费 | 91精品国产91久久久久游泳池 | 亚洲国产精品一区 | 精产国产伦理一二三区 | 欧美aaaa视频 | 狠狠综合网| 久视频在线观看 | 91精品国产综合久久久密闭 | 国产在线观看一区二区三区 | 国产在线小视频 | 日本黄色的视频 | 免费午夜视频在线观看 | 一区二区精品 | 一区二区三区中文字幕 | 国产精品成人一区二区三区 | 天堂色网 | 国产精品国产成人国产三级 | 91久久精品一区二区二区 | 一级黄a | 亚洲黄色一级毛片 | h视频网站在线观看 | 日韩电影中文字幕在线观看 | 最近免费日本视频在线 | 色爱综合网 | 韩日一区二区 | 精品久久影院 | 91精品国产综合久久香蕉922 | 日韩三级在线观看 | 久久福利电影 | 国产美女在线免费观看 | 精品免费国产视频 |