Программирование Unix Networking - Программа зависла после чтения сообщения от клиента - PullRequest
0 голосов
/ 03 сентября 2011

В настоящее время я пишу простую клиентскую и серверную программу для Windows и Unix.На данный момент я просто хотел создать простой клиент и сервер, чтобы сервер передавал сообщение клиенту.Я получил это для работы в среде Windows, но у меня есть очень странная проблема для среды Unix.Кажется, что после получения сообщения сервер распечатывает это, но затем застревает.Он не будет пытаться отправить сообщение обратно клиенту или даже распечатать другую вещь после него.Я прикрепил бесконечный цикл, который я использую для сервера.Я использовал тот же код для версии Windows, и он, кажется, работает на 100%, поэтому я понятия не имею, почему это не так.

Ps Это мой первый пост, так что извините, если я что-то пропустил.Я также использую Cygwin для запуска своего кода Unix, если это поможет.

Заранее спасибо.

 for(;;)
    {

        char buf[1024];
        int cc = recv(newsockfd, buf, sizeof(buf), 0);
        if (cc == 0)
        {
            exit(0);
        }
        buf[cc] = NULL;
        printf("message received: %s\n", buf);
        printf("This Never Prints!");
        send(newsockfd, buf, cc, 0 );
        memset(&buf, '\0', sizeof(buf));
    }  

1 Ответ

2 голосов
/ 03 сентября 2011

Richard

Возможно, вторая строка не печатается, потому что stdout не очищается. Если ваш сокет неблокирующий, возможно, send() не работает, потому что ошибка в последующем memset повреждает данные перед их отправкой.

Попробуйте изменить три последних утверждения на

printf("This should print!\n"); // Add a newline
fflush(stdout);                 // Flush the output for good measure
send(newsockfd, buf, cc, 0);    // Unchanged
memset(buf, '\0', sizeof(buf)); // buf is already an address.

Это меняет поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...