我正在尝试实现一点洪流客户端。
第一步是解码 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。
第二步是向跟踪器的通告 URL 发送 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
。我究竟做错了什么?