#c #html #sockets #port
#c #HTML #сокеты #порт
Вопрос:
Итак, я немного поиграл с простой пересылкой HTML с помощью c . Многого не добился, и у меня есть несколько вопросов по магистрали.
Первое: нужно ли мне использовать какие-либо специальные библиотеки, отличные от библиотек сокетов, для простой пересылки HTML-данных и подключений?
Второй: когда клиент подключается к HTML-серверу, остается ли открытым TCP-соединение? Или он закрывается после отправки данных?
Третье: когда я пересылаю данные с клиента на сервер, пакет включает адрес назначения. Технически я должен быть в состоянии прочитать этот адрес и подключиться к серверу через порт 80, оставить его открытым и отправлять и получать на этом недавно открытом порту, верно? Есть ли что-нибудь, что я должен сделать? Есть какие-либо временные ограничения? Если я напрямую пересылаю каждый отдельный пакет непосредственно между клиентом и сервером, веб-сайт должен корректно отображаться на клиенте, правильно?
Я бы предпочел свести к минимуму количество любых внешних библиотек. Но при необходимости я могу расширить программу, включив в нее любые требуемые библиотеки.
До сих пор я получал данные от обеих сторон, однако веб-сайт не функционирует.
[platform] :: windows.primary amp;amp; posix_compliant.secondary
Комментарии:
1. Хотите код? Я могу предоставить все необходимое.
2. Вы имеете в виду переадресацию HTTP? HTML — это язык, HTTP — это протокол поверх TCP.
3. По сути, я имею в виду прокси-сервер. Разница заключается в дополнительном необходимом контроле над местом назначения пакетов… (редактировать) да, я не подумал о различии, извините за любую путаницу..
Ответ №1:
Во-первых: Нет, вам не нужны другие специальные библиотеки, но не использовать ни одну из доступных было бы в какой-то степени изобретением колеса.
Второе: нет, HTTP — это протокол без установления соединения.
Третье: HTTP-сеанс начинается с заголовка запроса, который в вашем случае звучит как POST . Сообщение может принимать более одного пакета, в течение которого соединение остается открытым. Сервер вполне может истечь по вашему тайм-ауту.
Вы могли бы взглянуть на libCURL, даже если вы не собираетесь его использовать. (Исходный код для этого находится на C и довольно монолитен, но он широко используется).
Комментарии:
1. 1. Фантастика! Я подумал, что это было бы изобретением колеса … 2. Ооо, тогда это имеет смысл… Поскольку протокол не устанавливает соединения, я буду получать что-либо с сервера только тогда, когда клиент что-то инициирует, правильно? 3. Я посмотрю на libCURL (в какой-то степени уже использую) 4. Спасибо за вашу помощь!
2. Во-вторых, вы, вероятно, имеете в виду постоянные соединения (поскольку HTTP находится поверх TCP, довольно сложно, чтобы он был без подключения). HTTP 1.0 не поддерживает постоянные соединения, но HTTP 1.1 поддерживает.
3. Хорошо, я проводил некоторое тестирование и с google.com мое соединение оставалось открытым, однако я не получал никаких данных из сокета, когда отправлял пакет моего клиента (на самом деле их было два)… Должен ли я повторно подключаться к каждому пакету?
Ответ №2:
После проведения довольно большого исследования, наибольшую помощь, которую я получил в своих начинаниях, оказал этот веб-сайт.
Это тоже немного помогло.
LibCURL — это, безусловно, правильный путь. Это немного устарело, и все на C, но это намного проще, чем все переделывать..
цитата со второго сайта:
Как и большинство сетевых протоколов, HTTP использует модель клиент-сервер: HTTP-клиент открывает соединение и отправляет сообщение с запросом на HTTP-сервер; затем сервер возвращает ответное сообщение, обычно содержащее запрошенный ресурс. После доставки ответа сервер закрывает соединение (делая HTTP протоколом без состояния, т. е. не сохраняя никакой информации о соединении между транзакциями).