метод connect () C в Android - PullRequest
       3

метод connect () C в Android

0 голосов
/ 27 октября 2010

H!

У меня есть источник на C, который использует метод connect(peer->fd, (struct sockaddr *)dst->sockaddr, sizeof(struct sockaddr_in)); C. Я использую NDK и делаю JNI. Мое приложение представляет собой модуль msrp, который содержит сервер и клиент. Этот метод является частью клиента.

Исходный фрагмент:


/* 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;
    }

и результат:

----[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

Я добавил в AndroidManifest.xml.

Оригинальный исходный код: libmsrp

Спасибо

1 Ответ

3 голосов
/ 27 октября 2010

Проверьте синтаксис if:

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

В конце условия if не должно быть точек с запятой.Если этот код когда-либо компилируется, то он всегда возвращает -1.

Также проверьте ваш отступ.Это все неправильно.Это может быть скрытие ошибок, потому что мы не знаем, что может закрывать последняя фигурная скобка, и в любом случае это делает ваш код трудным для чтения.

if(connect(peer->fd,
       (struct sockaddr *)dst->sockaddr,
       sizeof(struct sockaddr_in) == -1) {
    perror("---- [msrp_peer_connect]---- connect() failed");
    return -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...