0

私はサーバーとクライアントコードを書きましたクライアントはサーバーに正常に接続できますが、ローカルアドレスでのみインターネット経由で接続する方法がわかりません

int main()
{
    struct addrinfo host_info;
    struct addrinfo * host_list;
    struct sockaddr sa;
    struct sockaddr_in ip4addr;

    memset(&host_info, 0, sizeof host_info);

    host_info.ai_family = AF_INET;     // IP version not specified. Can be both.
    host_info.ai_socktype = SOCK_STREAM;
    getaddrinfo(NULL, "5555", &host_info, &host_list);
    int s;
    s=socket(host_list->ai_family,host_list->ai_socktype,host_list->ai_protocol);
    if(s==-1) printf("error\n");

    int status = connect(s, host_list->ai_addr, host_list->ai_addrlen);
    if (status == -1)  printf("connect error\n");

    char *message="Hi there!";
    send(s, message, 10, 0);
    return 0;
}

getaddrinfo の NULL を IP アドレスに変更しようとしましたが、常に接続に失敗します

4

1 に答える 1

0

インターネット経由で接続しようとしている TCP/IP アドレスはどれですか?

getaddrinfo() には、何らかの IP アドレスが必要です。そうしないと、接続先がわかりません。住所のない手紙を送ろうとするようなものです。

さらに、接続できない理由はたくさんあります。ファイアウォールが何かをブロックしている可能性があります...相手側に何かをブロックしているファイアウォールがある可能性があります...AVソフトウェアは、「奇妙な」と思われる接続を検出してブロックしている可能性さえあります...IPアドレスが間違っている。

あなたが行ったトラブルシューティングとあなたが見ているものについて話すことは役に立ちます.

于 2013-11-06T15:30:02.683 に答える