You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java UDP连接Tracker无响应问题求助(GraalVM项目)

UDP Tracker连接阻塞无响应问题

我正在基于GraalVM开发一款从.torrent文件下载种子的CLI及原生应用作为学习项目,目前在尝试与UDP Tracker建立连接时遇到问题:能够发送连接请求,但datagramSocket.receive(packet)操作一直阻塞,始终无法获取响应。

已做排查:

  • Ubuntu防火墙已禁用
  • 执行sudo ufw allow 38438/udp开放了端口,但问题仍未解决

负责UDP Tracker连接的Java类代码如下:

package org.jtorr.service.impl;

import com.dampcake.bencode.Bencode;
import org.jtorr.component.generator.TransactionIdGenerator;
import org.jtorr.exception.TrackerServiceException;
import org.jtorr.model.bencode.BencodeData;
import org.jtorr.model.bencode.TrackerResponse;
import org.jtorr.model.tracker.TrackerUDPConnect;
import org.jtorr.service.TrackerService;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;

public class UdpTrackerServiceImpl implements TrackerService {
    private static final int DEFAULT_PORT = 6969;

    private final DatagramSocket datagramSocket;
    private final TransactionIdGenerator transactionIdGenerator;
    private final Bencode bencode;

    public UdpTrackerServiceImpl() {
        try {
            datagramSocket = new DatagramSocket(DEFAULT_PORT);
            transactionIdGenerator = new TransactionIdGenerator();
            bencode = new Bencode();
        } catch (SocketException e) {
            throw new TrackerServiceException("Error instantiating service: " + e.getMessage(), e);
        }
    }

    @Override
    public TrackerResponse getPeersInfoFromTracker(BencodeData bencodeData, String peerId, String infoHash) {
        var uri = announceToURI(bencodeData.announce());
        createConnectionRequest(uri);

        return null;
    }

    private URI announceToURI(String announce) {
        try {
            return new URI(announce);
        } catch (URISyntaxException e) {
            throw new TrackerServiceException("Error creating URI from announce: " + e.getMessage(), e);
        }
    }

    private void createConnectionRequest(URI uri) {
        try {
            var transactionId = transactionIdGenerator.generate();
            var buff = TrackerUDPConnect.builder()
                    .transactionId(transactionId)
                    .build()
                    .getBytes();

            var address = InetAddress.getByName(uri.getHost());
            var packet = new DatagramPacket(buff, buff.length, address, uri.getPort());
            datagramSocket.send(packet);

            packet = new DatagramPacket(buff, buff.length);
            datagramSocket.receive(packet);

            var response = new String(packet.getData(), 0, packet.getLength());
            System.out.println(response);
        } catch (UnknownHostException e) {
            throw new TrackerServiceException("Error connecting to host: " + e.getMessage(), e);
        } catch (IOException e) {
            throw new TrackerServiceException("Error creating connection with tracker: " + e.getMessage(), e);
        }
    }
}

内容的提问来源于stack exchange,提问作者Paulo Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:06:12