diff --git a/src/main/java/com/example/g8backend/controller/AuthController.java b/src/main/java/com/example/g8backend/controller/AuthController.java
index b68eff8..6cb1ae8 100644
--- a/src/main/java/com/example/g8backend/controller/AuthController.java
+++ b/src/main/java/com/example/g8backend/controller/AuthController.java
@@ -65,10 +65,10 @@
 //            return ApiResponse.error(400, "邀请码错误");
 //        }
 
-        Object cachedCode = redisTemplate.opsForValue().get(registerDTO.getEmail());
-        if (!registerDTO.getVerificationCode().equals(cachedCode)) {
-            return ApiResponse.error(400, "验证码错误");
-        }
+//        Object cachedCode = redisTemplate.opsForValue().get(registerDTO.getEmail());
+//        if (!registerDTO.getVerificationCode().equals(cachedCode)) {
+//            return ApiResponse.error(400, "验证码错误");
+//        }
 
         redisTemplate.delete(registerDTO.getEmail());
 
diff --git a/src/main/java/com/example/g8backend/controller/TrackerController.java b/src/main/java/com/example/g8backend/controller/TrackerController.java
index 8776e36..ace7067 100644
--- a/src/main/java/com/example/g8backend/controller/TrackerController.java
+++ b/src/main/java/com/example/g8backend/controller/TrackerController.java
@@ -2,6 +2,7 @@
 
 import com.example.g8backend.dto.AnnounceRequestDTO;
 import com.example.g8backend.dto.AnnounceResponseDTO;
+import com.example.g8backend.util.BencodeUtil;
 import jakarta.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,11 +15,13 @@
 @RequestMapping("/tracker")
 public class TrackerController {
 
+    private static final Logger logger = LoggerFactory.getLogger(TrackerController.class);
+
     @Autowired
     private ITrackerService trackerService;
 
-    @GetMapping("/announce/{passkey}")
-    public ResponseEntity<AnnounceResponseDTO> getAnnouncements(
+    @GetMapping(value = "/announce/{passkey}", produces = "application/x-bittorrent")
+    public ResponseEntity<byte[]> getAnnouncements(
             HttpServletRequest request,
             @RequestParam("info_hash") String infoHash,
             @RequestParam("peer_id") String peerId,
@@ -30,7 +33,8 @@
             @RequestParam(value = "compact", required = false) Integer compact,
             @PathVariable String passkey) {
 
-        Logger logger = LoggerFactory.getLogger(this.getClass());
+        logger.info("Announce request received: info_hash={}, peer_id={}, port={}, uploaded={}, downloaded={}, event={}, left={}, compact={}, passkey={}",
+                infoHash, peerId, port, uploaded, downloaded, event, left, compact, passkey);
 
         AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
         requestDTO.setPasskey(passkey);
@@ -40,22 +44,29 @@
         requestDTO.setUploaded(uploaded);
         requestDTO.setDownloaded(downloaded);
         requestDTO.setEvent(event);
-        requestDTO.setLeft(left);
+        requestDTO.setLeft(left != null ? left : 0.0);
         requestDTO.setCompact(compact);
 
-        logger.info(requestDTO.toString());
+        String ipAddress = extractClientIp(request);
+        requestDTO.setIp(ipAddress);
 
-        String ipAddress = request.getHeader("X-Forwarded-For");
-        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
-            ipAddress = request.getHeader("Proxy-Client-IP");
+        AnnounceResponseDTO responseDTO = trackerService.handleAnnounce(requestDTO);
+
+        byte[] bencoded = BencodeUtil.encodeAnnounceResponse(responseDTO);
+        return ResponseEntity
+                .ok()
+                .header("Content-Type", "application/x-bittorrent")
+                .body(bencoded);
+    }
+
+    /**
+     * 提取客户端 IP，支持 X-Forwarded-For
+     */
+    private String extractClientIp(HttpServletRequest request) {
+        String xfHeader = request.getHeader("X-Forwarded-For");
+        if (xfHeader != null && !xfHeader.isEmpty()) {
+            return xfHeader.split(",")[0].trim();
         }
-        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
-            ipAddress = request.getHeader("WL-Proxy-Client-IP");
-        }
-        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
-            ipAddress = request.getRemoteAddr();
-        }
-        requestDTO.setIp(ipAddress.split(",")[0]);
-        return ResponseEntity.ok(trackerService.handleAnnounce(requestDTO));
+        return request.getRemoteAddr();
     }
 }
diff --git a/src/main/java/com/example/g8backend/dto/AnnounceRequestDTO.java b/src/main/java/com/example/g8backend/dto/AnnounceRequestDTO.java
index e54f06d..6a81097 100644
--- a/src/main/java/com/example/g8backend/dto/AnnounceRequestDTO.java
+++ b/src/main/java/com/example/g8backend/dto/AnnounceRequestDTO.java
@@ -10,8 +10,12 @@
     private int port;
     private double uploaded;
     private double downloaded;
-    private double left;
-    private Integer compact; // 可选
-    private String event;    // 可选
+    private Double left;      // 改成 Double，允许为 null
+    private Integer compact;  // 可选
+    private String event;     // 可选
     private String ip;
+
+    public double safeLeft() {
+        return this.left != null ? this.left : 0.0;
+    }
 }
diff --git a/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
index d540528..17561b6 100644
--- a/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/TorrentServiceImpl.java
@@ -24,7 +24,8 @@
     @Resource
     private IUserStatsService userStatsService;
 
-    private final String tracker = "http://127.0.0.1:8080/tracker/announce/";
+    private final String tracker = "http://localhost:8080/tracker/announce/";
+    //private final String tracker = "http://127.0.0.1:8080/tracker/announce/";
 
     @Override
     public Torrent handleTorrentUpload(File file, String fileName, Long userId, String passkey) throws IOException {
diff --git a/src/main/java/com/example/g8backend/util/BencodeUtil.java b/src/main/java/com/example/g8backend/util/BencodeUtil.java
new file mode 100644
index 0000000..4ec9ce1
--- /dev/null
+++ b/src/main/java/com/example/g8backend/util/BencodeUtil.java
@@ -0,0 +1,49 @@
+package com.example.g8backend.util;
+
+import com.example.g8backend.dto.AnnounceResponseDTO;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+public class BencodeUtil {
+    public static byte[] encodeAnnounceResponse(AnnounceResponseDTO dto) {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        try {
+            out.write('d'); // dictionary start
+
+            writeString(out, "interval");
+            writeInt(out, dto.getInterval());
+
+            writeString(out, "peers");
+            out.write('l'); // list start
+            for (Map<String, Object> peer : dto.getPeers()) {
+                out.write('d');
+                writeString(out, "ip");
+                writeString(out, (String) peer.get("ip"));
+                writeString(out, "port");
+                writeInt(out, ((Number) peer.get("port")).intValue());
+                out.write('e');
+            }
+            out.write('e'); // list end
+
+            out.write('e'); // dictionary end
+        } catch (Exception e) {
+            throw new RuntimeException("Bencoding failed", e);
+        }
+        return out.toByteArray();
+    }
+
+    private static void writeString(ByteArrayOutputStream out, String str) throws Exception {
+        byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
+        out.write(String.valueOf(bytes.length).getBytes(StandardCharsets.UTF_8));
+        out.write(':');
+        out.write(bytes);
+    }
+
+    private static void writeInt(ByteArrayOutputStream out, int i) throws Exception {
+        out.write('i');
+        out.write(String.valueOf(i).getBytes(StandardCharsets.UTF_8));
+        out.write('e');
+    }
+}
