Программа сокета C застряла в режиме прослушивания()

Я пытаюсь изучить программирование сокетов на C, и я пытался установить базовое TCP-соединение между клиентом и сервером, однако в моем server.c мой код, похоже, просто застрял в Listen(). Он не выполняет следующие строки и не возвращает сообщение об ошибке.

#include<stdio.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include<string.h>
#include<unistd.h>

int main(){
    char *ip = "127.0.0.1";
    int port =5566;
    int server_sock,client_sock;
    struct sockaddr_in serveraddr,clientaddr;
    socklen_t addr_size;
    char buffer[1024];
    int n;
    server_sock=socket(AF_INET,SOCK_STREAM,0);
    if (server_sock<0){
        perror("[-]Socket error");
        exit(1);
    }
    printf("[+] TCP server socket created\n");

    memset(&serveraddr,'\0',sizeof(serveraddr));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=port;
    serveraddr.sin_addr.s_addr=inet_addr(ip);
    n=bind(server_sock,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
    if (n<0){
        perror("[-]Bind error");
        exit(1);
    }
    printf("[+] TCP SOCKET BOUND to port %d\n",port);
    n=listen(server_sock,5);
    if (n<0){
        perror("listen error\n");exit(1);
    }
    printf("server listening");
    while(1){
        addr_size=sizeof(clientaddr);
        client_sock=accept(server_sock,(struct sockaddr*) &clientaddr,&addr_size);
        printf("[+]Client Connected.\n");
    }
    

}

Это мой текущий server.c n=listen(server_sock,5); Дальше этой строки он не выполняется. В моем client.c код аналогичен, однако я получаю ошибку привязки

однако я получаю ошибку привязки. Покажите фактическое сообщение и код, вызывающий ошибку.

OldBoy 12.08.2024 13:09

Ваш поток stdout, вероятно, по умолчанию установлен в режим строковой буферизации, поэтому он ожидает, что в поток будет записана новая строка, прежде чем он сбросит содержимое буфера в базовый файловый дескриптор. Добавление вызовов fflush(stdout); приведет к принудительному сбросу буферизованного содержимого в базовый файловый дескриптор.

Ian Abbott 12.08.2024 13:54

Когда ваша программа сообщает об ошибке привязки, она сразу же завершает работу. Я не понимаю, как он мог одновременно сообщить об ошибке привязки и выполнить вызов listen() за один и тот же запуск.

John Bollinger 12.08.2024 15:17

Кстати, ты не правильно настраиваешь порт.

Shawn 12.08.2024 15:50
serveraddr.sin_port=port; -> serveraddr.sin_port=htons(port); Кроме того, ваш цикл должен вызвать close(client_sock);, если accept() успешен.
Remy Lebeau 12.08.2024 22:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

«Мой код, по-видимому, просто застрял в функции Listen()» Это иллюзия. Это не. Убедитесь, что в конце каждого сообщения, которое вы печатаете и запускаете снова, есть новая строка (\n).

– Комментарий от Н. м. может быть ИИ

Он прав

Другие вопросы по теме