Для стороне клиента TCP:
Использование gethostbyname для поиска имени DNS в IP, он будет возвращать структуру hostent. Давайте назовем этот хост возвращаемого значения.
hostent *host = gethostbyname(HOSTNAME_CSTR);
Заполните адрес сокета структуру:
sockaddr_in sock;
sock.sin_family = AF_INET;
sock.sin_port = htons(REMOTE_PORT);
sock.sin_addr.s_addr = ((struct in_addr *)(host->h_addr))->s_addr;
Создание сокета и вызова подключения:
s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, (struct sockaddr *)&sock, sizeof(sock))
Для стороны TCP сервера:
Настройка сокета
Привяжите свой адрес к этому сокету с помощью bind.
Начать прослушивание сокета с слушать
вызов принять, чтобы получить связной клиент. < - в этот момент вы создаете новый поток для обработки соединения, в то время как вы принимаете другой вызов, чтобы принять следующий подключенный клиент.
Общая связь:
Использование посыла и RECV для чтения и записи между клиентом и сервером.
Исходный код пример BSD сокетов:
Вы можете найти хороший пример кода этого в wikipedia.
Дальнейшее чтение:
Я настоятельно рекомендую this book и this online tutorial:
4:
Разъемы RAW очень сложны и немного отличаются в разных системах. Я знаю, что люди используют их для кодирования снифферов (например, «wirehark») и некоторых довольно тайных диагностических программ. Они, конечно же, не являются хорошим местом для обучения программированию сокетов. В большинстве случаев «я начинаю программист на C++/сетевой администратор» означает «держаться подальше от SOCK_RAW». – 2012-08-28 02:52:18
@ChuckKollars, я не согласен. Я думаю, что изучение сырых сокетов - отличный способ изучения C++, и особенно C. Использование библиотеки - это одно, но сырые сокеты с Linux - это очень проницательный опыт. C++ может делать так много уникальных вещей. Я думаю, что избежать страдания, которое вы подразумеваете, является ошибкой. – motoku 2014-06-22 18:29:26
Какая система у вас есть? Реализация сокетов «Raw» значительно отличается от одной системы к следующей, так что то, что вы узнаете (в основном, в основном о системе, а не о C++), не переносится в другом месте. – 2014-07-05 05:23:46