예제 #1
0
Package* receivePackage(Connection* connection) {
    Package* package = NULL;
    char packageStr[sizeof (Package)];
    CONN_receive(connection, packageStr, sizeof (Package), 0);
    package = (Package*) packageStr;
    printf("recebi '%s' do cliente (%s:%s)... (len = %zd)\n", package->dados, CONN_getPeerName(connection), CONN_getPeerPort(connection), sizeof (Package));
    return package;
}
예제 #2
0
int main(int argc, char** argv) {

    //Conexão ao cliente
    connection_t* connection;

    //host do servidor e a porta a conectar
    char* host;
    char* port;

    //Buffer usado para receber e enviar dados
    char buffer[BUFFER_SIZE];
    char typeRequest[BUFFER_SIZE];
//    memset(typeRequest, '\0', sizeof(char)*2);

    //Verificar se a porta e o host foi passado como argumento
    if (argc < 3) {
        fprintf(stderr, "uso: %s host porta\n", argv[0]);
        return EXIT_FAILURE;
    }

    //Host é o primeiro argumento e porta o segundo.
    host = argv[1];
    port = argv[2];

    //Conectar ao servidor
    connection = CONN_connectTo((char*) host, (char*) port);

    //verificar se houve sucesso na conexão
    if (!connection) {
        fprintf(stderr, "Não foi possível conectar a %s:%s!\n", host, port);
        return (EXIT_FAILURE);
    }

    //Aguardar a mensagem de boas vindas e imprimi-la
    CONN_receive(connection, buffer, 1024, 0);
    printf("%s\n", buffer);

    //    CONN_receive(connection, typeRequest, 2, 0);
    //    CONN_receive(connection, buffer, BUFFER_SIZE, 0);
    //    printf("%s\n", buffer);

    while (1) {
//        memset(buffer, 0, BUFFER_SIZE);

        printf("Digite uma requisição: \n>>> ");

        //ler a mensagem a ser enviada ao servidor
        fgets(buffer, BUFFER_SIZE, stdin);

        //subtituir \n por um terminador de string
        *(strstr(buffer, "\n")) = 0;

        //ter certeza que há um terminador de string no último caractere
        buffer[BUFFER_SIZE - 1] = 0;

        //enviar a mensagem
        CONN_send(connection, buffer, strlen(buffer) + 1, 0);

        //aguardar o echo
        CONN_receive(connection, typeRequest, BUFFER_SIZE, 0);
//        printf("type: %d", type);
        if (!strcmp(typeRequest, "ls")) {//!strcmp(typeRequest, "ls")
//            memset(buffer, 0, BUFFER_SIZE);
            CONN_receive(connection, buffer, BUFFER_SIZE, 0);
            printf("%s\n", buffer);

        } else if (!strcmp(typeRequest, "wg")) {//!strcmp(typeRequest, "wg")
//            memset(buffer, 0, BUFFER_SIZE);
            char nomeArquivo[BUFFER_SIZE];
            CONN_receive(connection, nomeArquivo, BUFFER_SIZE, 0);

            FILE *f;
            f = fopen(nomeArquivo, "w");

            do {

                CONN_receive(connection, buffer, BUFFER_SIZE, 0);
                int i;
                for (i = 0; i < strlen(buffer) - 1; i++) {
                    fputc(buffer[i], f);
                }

            } while (strcmp(buffer, "EOF"));

            fclose(f);
            //guardar arquivo no diretório
        }
//        memset(typeRequest, '\0', sizeof(char)*2);
        //        else if (strcmp(typeRequest, "erro")) {
        //            CONN_receive(connection, buffer, BUFFER_SIZE, 0);
        //            printf("%s\n", buffer);
        //        }

        //verificar se enviou um "sair". Caso afirmativo, terminar o cliente.
        if (!strcmp(buffer, "sair")) {
            break;
        }
    }

    //fechar a conexão
    CONN_close(connection);

    return EXIT_FAILURE;

}