Notas da biblioteca Libevent (três) o processo mais básico de desenvolvimento de servidor e cliente

1. O processo mais básico de servidor TCP e desenvolvimento de cliente

1.1. Processo de programação do servidor

1. Crie event_base_new () para criar uma base de evento de objeto de contexto de estrutura
2. evconnlistener_new_bind aloca um objeto ouvinte, escuta conexões TCP em um determinado endereço e notifica você para configurar um retorno de chamada de ouvinte (a estrutura chamará quando uma nova conexão vier).
Observações: Esta função é equivalente a completar as chamadas de sistema socket (), bind (), listen () e definir a função de retorno de chamada de aceitação
(1) criar um evento de buffer de soquete por meio de um descritor de soquete existente no retorno de chamada de escuta;
(2) definir o evento de buffer Função de retorno de chamada de evento;
(3) Ativar / desativar área de buffer de gravação relacionada a bufferevent
3. Iniciar loop de envio de evento event_base_dispatch ()
4. Ler e gravar operações de acordo com a lógica de negócios bufferevent_read () / bufferevent_write ()
5. Liberar recursos relacionados quando terminar;

1.2. Processo de programação do cliente

1. Crie event_base_new () para criar a base de evento do objeto de contexto da estrutura
2. Use bufferevent socket new () para criar um evento bufferevent que se comunique com o servidor.
3. Defina a função de retorno de chamada do evento bufferevent_setcb () para o evento bufferevent. No corpo de retorno de chamada do evento
(1) determine os eventos Se o valor do evento for BEV_EVENT_CONNECTED, o processamento lógico da conexão foi bem-sucedido;
(2) Se o valor do evento for determinado como BEV_EVENT_ERROR, então ocorre o processamento lógico do erro de conexão;
4. bufferevent_socket_connect () se conecta ao servidor
(1) Se ele retornar diretamente -1, isso significa
Se ocorreu um erro, prossiga com o processamento da lógica de erro; (2) Se retornar 0, isso significa várias possibilidades. Pode ser bem-sucedido ou ainda pode estar na fase de handshake. É julgado de acordo com o retorno de chamada do evento definido.
5. Inicie o loop de despacho do evento event_base_dispatch ()
6 , Executar operações de leitura e gravação de acordo com a lógica de negócios bufferevent_read () / bufferevent_write ()
7. Liberar recursos relacionados quando terminar;

1.3. Amostra de código do lado do servidor

Consulte hello-world.c no pacote fonte oficial.
Para a versão do comentário, consulte o endereço:
notas da biblioteca Libevent (2) a versão do comentário do código de amostra hello-world

1.4. Código de amostra de programação do cliente

Observação: este código vem de artigos da web. Muitos artigos usam esse código, e eu não sei qual é o original.

#include <event2/event.h>
#include <event2/bufferevent.h>
#include <sys/socket.h>
#include <string.h>

void eventcb(struct bufferevent *bev, short events, void *ptr)
{
    
    
    if (events & BEV_EVENT_CONNECTED) {
    
    
         
    } else if (events & BEV_EVENT_ERROR) {
    
    
         /* An error occured while connecting. */
    }
}

int main_loop(void)
{
    
    
    struct event_base *base;
    struct bufferevent *bev;
    struct sockaddr_in sin;

    base = event_base_new();

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl(0x7f000001); /* 127.0.0.1 */
    sin.sin_port = htons(8080); /* Port 8080 */

    bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);

    bufferevent_setcb(bev, NULL, NULL, eventcb, NULL);

    if (bufferevent_socket_connect(bev,
        (struct sockaddr *)&sin, sizeof(sin)) < 0) {
    
    
        /* Error starting connection */
        bufferevent_free(bev);
        return -1;
    }

    event_base_dispatch(base);
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/skytering/article/details/104285102
Recomendado
Clasificación