Более чем вероятно вопрос новобранец, но я ищу функцию printf
-esque для использования в send
через TCP-сокеты. Это для простого чат-сервера, в частности модифицированной версии той, что находится в руководстве для сокета Beej. Я готов написать свое, но прежде чем я сделаю, я хочу убедиться, что я не изобретаю колесо.Есть ли fprintf для отправки?
Я ищу что-то родное для C, а не библиотеку или что-то в этом роде. Я делаю это как интеллектуальное преследование, и использование готовой библиотеки не будет учить меня так же, как испортить, пока я не получу это правильно и не пойму, почему.
Оценка за каждого, кто отвечает!
Edit: настоящее время я использую:
if(current_user->fs_id == sending_user->fs_id) {
snprintf(server->current_buffer, buffer_size, "You said: %s", message);
} else {
snprintf(server->current_buffer, buffer_size, "%s said: %s", sending_user->name, message);
}
if(send(current_user->fs_id, server->current_buffer, buffer_size, 0) == -1) {
perror("Sending data");
}
Я понимаю, что это не самый лучший способ сделать это, это часть того, что я фиксируя в настоящее время.
Интересно. Есть ли какие-либо «gotchas», связанные с этим вне типов, которые вы можете найти, работая с обычными файлами? Скоростные удары или тому подобное? Изменить: например, send требует от меня цикла с ним, пока не будет отправлено полное содержимое, не так ли? Это относится к fprintf таким образом? – Codeacula
Предполагая, что это потоковое сокет в режиме блокировки, fprintf позаботится о любых циклах, которые необходимы. Единственная «gotcha» - это если вы используете Windows; в Windows сокеты не являются файловыми дескрипторами, как на каждой другой ОС. – mark4o
Спасибо, mark4o. И как продолжение, делает это медленнее, чем использование send/recv напрямую? Это заметная разница? – Codeacula