1

TFTP クライアント (UDP ソケット) の実装に取り​​組んでいます。

現在、Windows 8 マシンのファイアウォール全体をオフにする必要があります。オフにしないと、データが TFTP クライアントに到達しません。送信接続要求はポート 69 で発生しますが、TFTP サーバーからの最初のデータ パケットは別のランダム ポートに送信されます。私の質問は次のとおりです。ファイアウォールがオンになっているマシンで TFTP クライアント (アプリケーションとして) がパケットを受信できるようにするにはどうすればよいですか?

Visual Studio 2005 でデバッグ モードで TFTP クライアントを実行すると、ファイアウォールをオフにしない限り、クライアントもパケットを受信しません。どうすれば解決できますか?

ありがとう

更新 (コード)

void main(void)
{
    unsigned short OPCODE = htons((unsigned short)1);
    char* fileName = "thisfile.cnf.xml";
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    SOCKET sockfd;
    int n;
    char buf[256] = {0};
    int L;
    struct sockaddr_in servaddr;
    char recvline[1000];
    int rc;

    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    memcpy(buf, &OPCODE, 2);
    sprintf_s(&buf[2], 254, "%s%c%s%c", fileName, '\0', "octet", '\0');
    L = (int) strlen(fileName) + 9;
    sockfd=socket(AF_INET,SOCK_DGRAM,0);
    memset(&servaddr,0,sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr=inet_addr("212.158.10.33");
    servaddr.sin_port=htons(69);
    rc = sendto(sockfd,buf,L,0, (struct sockaddr *)&servaddr,sizeof(servaddr));

    while (1)
    {
       printf("Receive 1st packet...\n");
       /* This call gets blocked unless firewall is off */
       n=recvfrom(sockfd,recvline,1000,0,NULL,NULL);
       printf("%d bytes received\n", n);
       break;
    }
}
4

1 に答える 1