merge database1 and 2

Change-Id: I43364775eaaa5ec4b9c74abfb437245824c9c922
diff --git a/src/main/java/tracker/DataCaptureProxy.java b/src/main/java/tracker/DataCaptureProxy.java
index be7d9f6..c2ed137 100644
--- a/src/main/java/tracker/DataCaptureProxy.java
+++ b/src/main/java/tracker/DataCaptureProxy.java
@@ -3,6 +3,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 import java.net.URL;
 
 import org.simpleframework.http.Request;
@@ -21,25 +23,40 @@
     public DataCaptureProxy(String trackerHost, int trackerPort) {
         this.trackerHost = trackerHost;
         this.trackerPort = trackerPort;
-        this.tracker = new Tracker(); // 初始化Tracker实例
+        this.tracker = new Tracker(); // 初始化 Tracker 实例
     }
 
     @Override
     public void handle(Request req, Response resp) {
         try {
             // 提取并打印关键参数
-            String infoHash  = req.getParameter("info_hash");
-            String uploaded  = req.getParameter("uploaded");
-            String downloaded= req.getParameter("downloaded");
-            String passkey   = req.getParameter("passkey");
+            String infoHash   = req.getParameter("info_hash");
+            String uploaded   = req.getParameter("uploaded");
+            String downloaded = req.getParameter("downloaded");
+            String passkey    = req.getParameter("passkey");
+
+            // 获取客户端IP地址
+            String clientIp;
+            // 直接从 TCP 连接(socket 源地址)中读取
+            SocketAddress socketAddress = req.getClientAddress();
+            if (socketAddress instanceof InetSocketAddress) {
+                clientIp = ((InetSocketAddress) socketAddress)
+                               .getAddress()
+                               .getHostAddress();
+            } else {
+                // 兜底写法,将整个 SocketAddress 转为字符串
+                clientIp = socketAddress.toString();
+            }
+
             System.out.println(
                 "Captured announce → info_hash=" + infoHash +
                 ", uploaded=" + uploaded +
                 ", downloaded=" + downloaded +
-                ", passkey=" + passkey
+                ", passkey=" + passkey +
+                ", client_ip=" + clientIp
             );
 
-            // 调用Tracker方法更新上传和下载数据
+            // 调用 Tracker 方法更新上传和下载数据
             if (passkey != null && !passkey.isEmpty()) {
                 try {
                     if (uploaded != null && !uploaded.isEmpty()) {
@@ -61,7 +78,7 @@
             }
 
             // 构造转发 URL
-            String path  = req.getPath().getPath();
+            String path = req.getPath().getPath();
             String query = req.getQuery().toString();
             String targetUrl = "http://" + trackerHost + ":" + trackerPort
                              + path + "?" + query;