Невозможно назначить запрошенный адрес для привязки сокета - PullRequest
0 голосов
/ 22 апреля 2020

Я проверил свой код, но я не знаю, почему программа не может связать сокет. Я перепробовал много ip и портов (даже 127.0.0.1), но он все еще не работает ... Вот код, который я использую:

//error message
void error (const char *msg)
{
    perror(msg);
    exit(1);
}

int main ()
{
    int sock, cli_sock, portno;
    char buffer[1024];
    char response[18432];

    struct sockaddr_in serv_addr, cli_addr;
    socklen_t cli_len;

    //creating socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
        error("Error opening socket");

    bzero ((char *) &serv_addr, sizeof(serv_addr));

    //giving port number
    portno = 50005;

    //giving ip address
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    serv_addr.sin_port = htons(portno);

    //bind socket
    if(bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) != 0)
        error("Binding failed.");

    //listen
    listen(sock, 5);

    cli_len = sizeof(cli_addr);

    //accept
    cli_sock = accept(sock, (struct sockaddr *) &cli_addr, &cli_len);
    if(cli_sock != 0)
        error("Error on accepting");
}

(Это просто часть сокета сервера код и просто для получения дополнительной информации, моя версия клиента для Windows, а версия моего сервера для Linux)

Это мой вывод при запуске программы:

Binding failed.: Cannot assign requested address

1 Ответ

0 голосов
/ 22 апреля 2020

Для TCP настройки для клиента и сервера были:

Сервер:

  • сокет (создать сокет прослушивания)
  • bind (прослушивающий сокер с локальным адресом: порт)
  • listen (чтобы прослушивающий сокет действительно прослушивался)

(принимаю заголовок l oop)

  • accept (ожидаем входящий сокет прослушивания соединения; возвращает принятый сокет при успешном соединении)
  • чтение / запись (из / в принятый сокет!)
  • shutdown (принятый сокет; необязательно)
  • close (принятый сокет)

(л oop нижний колонтитул)

  • выключение (гнездо для прослушивания; необязательно)
  • закрытие (гнездо для прослушивания)

Клиент:

  • сокет
  • bind (с локальным адресом: порт, необязательный и необычный)
  • connect (с удаленным адресом: порт, к которому относится сервер привязан к)
  • чтение / запись
  • завершение работы (необязательно)
  • закрытие
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...