Измените сервер так, чтобы он прослушивал только петлевой интерфейс.

Я пытаюсь запустить соединение клиент-сервер. Вот мой код:

server.c

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>

#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 13

/.../ int main(void) { int serverFd, connectionFd; структура sockaddr_in servaddr; временной буфер char[MAX_BUFFER+1]; time_t текущее время;

    serverFd = socket(AF_INET, SOCK_STREAM, 0);

    memset(&servaddr, 0 , sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(DAYTIME_SERVER_PORT);

    bind(serverFd, (struct sockaddr *) &servaddr, sizeof(servaddr));
    listen(serverFd, 5);

    while(1)
    {
        connectionFd = accept(serverFd, (struct sockaddr *) NULL, NULL);

        if(connectionFd >= 0)
        {
            currenTime = time(NULL);
            snprintf(timebuffer, MAX_BUFFER, "%s\n", ctime(&currenTime));
            write(connectionFd, timebuffer, strlen(timebuffer));
            close(connectionFd);
        }
    }
}

client.c

#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <string.h>

#define MAX_BUFFER 128
#define DAYTIME_SERVER_PORT 13


int main()
{
    int connectionFd, in;
    struct sockaddr_in servaddr;
    char timebuffer[MAX_BUFFER+1];

    connectionFd = socket(AF_INET,SOCK_STREAM,0);

    memset(&servaddr,0 ,sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(DAYTIME_SERVER_PORT);
    servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    connect(connectionFd,(struct sockaddr_in *) &servaddr , sizeof(servaddr));

    while((in = read(connectionFd, timebuffer, MAX_BUFFER)) >0)
    {
        timebuffer[in] = 0;
        printf("\n%s" , timebuffer);
    }
    /*...*/
    close(connectionFd);

}

Как изменить сервер для прослушивания интерфейса loopback (а не другого интерфейса)?


person Ahmad    schedule 22.10.2014    source источник


Ответы (1)


Изменять

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

просто использовать обратный адрес петли. то есть

servaddr.sin_addr.s_addr = htonl(2130706433L)

(используется http://www.smartconversion.com/unit_conversion/IP_Address_Converter.aspx для выполнения математика)

person Ed Heal    schedule 22.10.2014
comment
как мне проверить слушает он или нет - person Ahmad; 22.10.2014