připojení () metoda C v Android

hlasů
0

H!

Mám zdroj v C, která je pomocí connect(peer->fd, (struct sockaddr *)dst->sockaddr, sizeof(struct sockaddr_in));metody C. Používám NDK a učinit JNI. Moje aplikace je Obvyklá cena modul, který obsahuje server a klienta. Tato metoda je součástí klienta.

Zdroj fragment:


/* We're going to be the client, connect to the other peer */
dst->sockaddr = calloc(1, sizeof(dst->sockaddr));
dst->sockaddr->sin_family = AF_INET;
dst->sockaddr->sin_port = htons(dst->port);
if(inet_aton(dst->address, &(dst->sockaddr->sin_addr)) == 0) {  /* Not a numeric IP... */
    struct hostent *host = gethostbyname(dst->address); /* ...resolve name */
    if(!host) {
        local_events(MSRP_ERROR, Invalid host for address %s,
        dst->address ? dst->address : ???.???.???.???);
            return -1;
        }
        dst->sockaddr->sin_addr = *(struct in_addr *)host->h_addr_list;
    }
    printf(----[msrp_peer_connect]---- dst->sockaddr->sin_family: %d\n, dst->sockaddr->sin_family);
    printf(----[msrp_peer_connect]---- dst->sockaddr->sin_port: %d\n, dst->sockaddr->sin_port);
    printf(----[msrp_peer_connect]---- address_lenght: %d\n, sizeof(struct sockaddr_in));
    printf(----[msrp_peer_connect]---- socket description: %d\n, peer->fd);

    if(connect(peer->fd, (struct sockaddr *)dst->sockaddr, sizeof(struct sockaddr_in)) address, dst->port);
        return -1;
    }

a výsledek:

----[msrp_peer_connect]---- dst->sockaddr->sin_family: 2
----[msrp_peer_connect]---- dst->sockaddr->sin_port: 34330
----[msrp_peer_connect]---- address_lenght: 16
----[msrp_peer_connect]---- socket description: 5

Přidal jsem do AndroidManifest.xml.

Původní zdrojový kód: libmsrp

dík

Položena 27/10/2010 v 13:44
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Zkontrolujte si, pokud syntaxi:

if(connect(peer->fd,
       (struct sockaddr *)dst->sockaddr,
       sizeof(struct sockaddr_in)
       )
       address, dst->port);
    return -1;
}

Tam by neměl být žádný středník na konci if stavu. Pokud tento kód někdy překládá, pak to bude vždy vrátí hodnotu -1.

Také zkontrolujte odsazení. Je to všechno špatně. Dalo by se skrývat chyby, protože nevíme, co poslední složená závorka může být zavírání, a přesto to dělá váš kód obtížně čitelný.

A konečně byste neměli selhat bez zásahu uživatele.

if(connect(peer->fd,
       (struct sockaddr *)dst->sockaddr,
       sizeof(struct sockaddr_in) == -1) {
    perror("---- [msrp_peer_connect]---- connect() failed");
    return -1;
}
Odpovězeno 27/10/2010 v 18:12
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more