Реализация протоколов поверх TCP / IP довольно сложна и требует большого понимания того, как работают сети, сокеты и операционные системы ввода-вывода.
Кроме того, реализация HTTP на удивление сложна - вдобавок к сложности сети.
Я вежливо предполагаю, что вы, вероятно, находитесь в глубокой воде, поскольку вы должны задавать вопросы на этом уровне и, возможно, нуждаетесь в большей помощи, чем вы можете получить на SO.
... в любом случае.
Если сервер, с которого вы читаете, пытается установить http, используйте для него существующий компонент. Apache HttpComponents, если, вероятно, хороший выбор. Я на самом деле не покупаю, что это подделывает http заголовки, и я предлагаю вам пропустить свой «легкий» подход.
Вот некоторые основные факты о сетевом вводе-выводе.
Сетевые записи ориентированы на пакеты. Tcp / ip обычно старается как можно больше вложить в каждый пакет (используя некоторые умные алгоритмы). Это означает, что если вы записываете 4000 байтов, сообщение разбивается на несколько пакетов произвольного размера, но обычно меньше 1500 байт - в зависимости от сетевого оборудования. Это также означает, что
если вы пишете меньше пакета, ваши записи могут быть объединены в один пакет. (Пакеты также могут быть разделены и объединены по пути.)
Чтобы отправлять сообщения по потоку (который сам транспортируется в пакетах ...), вам нужно заранее знать, как долго эти сообщения, или прочитать полный пакет (сделать .read () в большой буфер), анализировать содержимое, извлекать и создавать полные сообщения каким-либо разумным способом. Именно то, что делает http. (среди прочего)
TCP / IP определенно НЕ ориентирован на строки, поэтому ваши переводы строк полностью игнорируются. HTTP использует длину содержимого (и некоторые другие приемы, которые не всегда могут быть определены) для отправки «сообщений» по одному потоку tcp / ip, которые могут закрываться или не закрываться при полной отправке сообщения.