【问题标题】:how to send a get request to bit torrent tracker如何向比特洪流跟踪器发送获取请求
【发布时间】:2012-12-04 14:41:04
【问题描述】:

我正在尝试实现一点 torrent 客户端。

第一步是解码torrent文件,我这样做了,结果如下:

d8:announce36:http://tracker.mininova.org/announce7:comment41:自动生成 Mininova.org 的洪流 CD13:creation datei1212041255e4:infod5:filesld6:lengthi291e4:pathl27:分发者 Mininova.txteed6:lengthi199784e4:pathl19:cs song.mp3.mp3eee4:name33:反恐精英歌曲版本 212:piece lengthi1048576e6:pieces20:趬oîdÏ9`•×=ü¼e6:locale2:en5:title33:The 反恐精英歌曲版本 2e。

第二步是发送一个 HTTP GET 请求到跟踪器的 用“?”宣布网址以及以下参数(如上编码) 附加。这是我印象深刻的部分。我一直在研究如何 在 C 中发送 HTTP GET;看来您需要先设置一个 TCP 套接字,然后 首先连接到跟踪器服务器。我一直在这样做:

if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
    printf("fail create socket");
    return 0;
}
char *path = “tracker.mininova.org/announce7”;
struct hostent *hp = gethostbyname(path);
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
&servAddr.sin_addr.s_addr = ((struct sockaddr_in*)(res->ai_addr))->sin_addr.s_addr;
servAddr.sin_port   = htons(portNum);

但是,gethostbyname 继续返回 null。我做错了什么?

【问题讨论】:

    标签: c get bittorrent


    【解决方案1】:

    您在一个不仅仅是域的字符串"tracker.mininova.org/announce7" 上调用gethostbyname。您只需要在域"tracker.mininova.org" 上调用它。你可以检查h_errno 的值来解决这个问题。

    但是,gethostbyname 和相关函数的使用无论如何都应该被getaddrinfo 的使用所取代(具有相同的限制,但会提供更好的结果)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多