谁在C中连接Socket

 121飒飒 发布于 2023-02-10 08:31

我正在编写一些客户端/服务器风格的程序.现在我正在开发服务器端,我打开一个套接字.

但是,我需要知道谁在我的插座中连接.什么IP连接.因为我需要输入在服务器上连接的日志.

所以,我的问题是如何在C中执行此操作?使用Linux.

我尝试使用getsockopt()但不起作用.我是网络编程的新手.

有人知道我该怎么办?

这是我的socket的代码:

int init_socket() {
    /** Declara um socket */
    Socket sock;

    /** Inicia o socket */
    sock.socket = socket(AF_INET, SOCK_STREAM, 0);

    /** Seta zeros no sockaddr */
    memset(&sock.server, 0, sizeof (sock.server));

    /** E tambem no buffer */
    memset(sock.buff, 0, sizeof (sock.buff));

    /** Seta os valores do sockaddr */
    sock.server.sin_family = AF_INET;
    sock.server.sin_addr.s_addr = htonl(INADDR_ANY);
    //sock.server.sin_port = htons(get_config_int(&conf, "monitor_port"));
    sock.server.sin_port = htons(2200);

    /** Chama o bind */
    bind(sock.socket, (struct sockaddr*) &sock.server, sizeof (sock.server));

    /*
     * É um socket blocante, então espera encher o buffer 
     * Faz o listen
     */
    if (listen(sock.socket, 2) == -1) {
        /** Deu falha na preparação para o accept, insere nos logs */
        insert_log(FATAL, LOG_KERNEL, "Não foi possível iniciar o socket - event.c");

        /** Retorna falha */
        return INIT_SOCKET_FAILED;
    }

    /** Se chegar aqui, faz o accept, dentro de um loop infinito */
    connect:
    while ((sock.conn = accept(sock.socket, (struct sockaddr*) NULL, NULL))) {
        printf("Recebi uma conexão, começando comunicação...\n");
        /** Agora conn é um file descriptor, podemos ler e gravar nele */
        while (1) {
            if (read(sock.conn, sock.buff, sizeof (sock.buff)) == 0) {
                close(sock.conn);
                printf("Pronto para outra conexão...\n");
                goto connect;
            }
            printf("Eu Li isso do Buffer: %s", sock.buff);

            /** Limpa o buffer */
            memset(sock.buff, 0, sizeof (sock.buff));
            sleep(1);
        }
    }

    return INIT_SOCKET_SUCCESS;
}

感谢帮助!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有