Предупреждение, опция -L позволяет указать путь для поиска библиотек, указать библиотеку, которую вы хотите связать с вами (также) необходимо использовать параметр -l
. чтобы добавить опции -lrpcmod -lnfs -lrpcsec -lklmmod -lzfs
Более подробно в GCC Linking Options
Если бы Вы серьезно относитесь к сетевому программированию, я настоятельно рекомендовал бы "сетевое программирование Vol 1 UNIX Richard W. Stevens" - оно намного лучше читает, чем RFCs с яркими примерами.
Это - очень дорогая книга, но существует дешевое издание в мягкой обложке, доступное на eBay. Даже если Вы получаете дорогой выпуск в твердом переплете это стоящий каждого пенса, Вы заплатили.
Для очень простого telnet (просто telnet к порту и байтам эха), нет очень, чтобы сделать. Читайте из сокета, обработайте его (в сервере эха, ничего не сделайте), плюньте назад результатом. Вы могли реализовать простой сервер стиля MUD, ничего не зная ни в каком RFCs.
Но если Вы действительно обеспокоены RFCs, RFC 854 мог бы быть начальной точкой.
Обратите внимание, что реальный telnet не является просто простым интерфейсом, который обрабатывает stdin
и stdout
из оболочки входа в систему пользователя.
Существует большая дополнительная функциональность, которую несут отдельно в 'опциях', которые обрабатывают такие вещи как установка $TERM
переменная среды, устанавливая строки/столбцы (и сбрасывая их, если пользователь изменяет размер их терминала).
Если Вы надеетесь делать реальный telnet и не только простой сервер TCP, то действительно RFC 854 является Вашей начальной точкой. Однако существуют стеки более соответствующие RFCs, которые описывают те опции, упомянутые, выше которого перечислены по http://en.wikipedia.org/wiki/Telnet
Если Вы нуждаетесь в помощи с сокетом, программирующим и т.д.
руководство beej's контроля: http://beej.us/guide/bgnet/
Знание, как сокет работы API внутренне очень полезен, потому что это часто экспортируется с очень незначительными изменениями высокоуровневыми языками.
Тем не менее Вы могли бы хотеть использовать поддержку цикла событий, оказанную Бойким и использовать связанную сетевую библиотеку GNet.
Вот то, как использовать GNet, чтобы открыть сокет на порте 4000, затем закрыть каждую связь, установленную с ним. Существует определенное волшебство здесь, поскольку сервер регистрирует себя в основном контексте по умолчанию как часть его создания.
#include <glib.h>
#include <gnet.h>
void client_connect(GServer G_GNUC_UNUSED *server, GConn *conn, gpointer G_GNUC_UNUSED user_data){
g_print("Connection from %s\n", conn->hostname);
gnet_conn_disconnect(conn);
gnet_conn_unref(conn); conn = NULL;
}
int main(void){
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GServer *server;
gnet_init();
server = gnet_server_new(NULL, 4000, client_connect, NULL);
g_main_loop_run(loop);
g_main_loop_unref(loop); loop = NULL;
return 0;
}
Я рекомендую установить Wireshark для отслеживания трафика Telnet с использованием существующего сервера Telnet. Затем, просмотрев журнал, вы сможете лучше понять, как сервер взаимодействует с клиентом. Затем используйте RFC в качестве справочника, если вы не понимаете ни одну из команд, передаваемых по сети.