2

私は少し急流のクライアントを実装しようとしています。

最初のステップはトレントファイルをデコードすることです。これは私が行った結果です。

d8:announce36:http://tracker.mininova.org/announce7:comment41:自動生成
Mininova.orgによる急流CD13:creation
datei1212041255e4:infod5:filesld6:lengthi291e4:pathl27:配布元
Mininova.txteed6:lengthi199784e4:pathl19:the cs
song.mp3.mp3eee4:name33:The Counter Strike Songバージョン212:piece
lengthi1048576e6:pieces20:趬oîdÏ9`•×=ü¼e6:locale2:en5:title33:The
カウンターストライクソングバージョン2e。

2番目のステップは、「?」を使用してトラッカーのアナウンスURLにHTTPGETリクエストを送信することです。そして、以下のパラメータ(上記のようにエンコードされた)が追加されました。これは私が打たれた部分です。私はCでHTTPGETを送信する方法を研究してきました。最初に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ます。私は何が間違っているのですか?

4

1 に答える 1

3

gethostbynameドメインだけではない文字列を呼び出しています"tracker.mininova.org/announce7"。ドメインだけで呼び出す必要があります"tracker.mininova.org"h_errnoこれを理解するために値を確認できます。

ただし、および関連する関数の使用はとにかくgethostbynameの使用に置き換える必要があります (これには同じ制限がありますが、より良い結果が得られます)。getaddrinfo

于 2012-12-04T06:39:00.653 に答える