C Клиент / Сервер, общающийся с fprintf? - PullRequest
3 голосов
/ 09 июня 2011

Как бы вы могли сделать так, чтобы сервер мог отправлять сообщения клиенту, используя printf или fprintf вместо системного вызова write?

У меня уже есть сервер, который работает и отправляет сообщения посредством записи, но я бы предпочел использовать fprintf.

Например, это не сработало:

newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, &clilen);
FILE *fp = fdopen(newsockfd, "w");
fprintf(fp, "test"); 
fflush(fp);

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

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Функции, которые работают на FILE s, вряд ли будут делать то, что вы ожидаете от них при работе с сокетами, и с большой вероятностью могут все испортить. Если вы хотите реализовать форматирование, я бы посоветовал вам свернуть свои собственные функции форматирования для записи в сокеты: все, что вам нужно сделать, это создать переменную функцию, вызвать vsprintf для форматирования и отправить результат с помощью write или send ...

0 голосов
/ 10 июня 2011

Как насчет использования системного вызова dup, так перенаправьте стандартный вывод в дескриптор сокета ... так что я думаю, что вы можете поместить свои вещи в сокет, используя printf.

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