LINUX.ORG.RU

Чайниковые разбиралки с TCP/IP сокетами


0

0

Всем привет! Пишу сервер на Perle и клиента к нему на C++(класс сам накропал - простая обертка С функций с отработкой ошибок по исключительным ситуациям). В классе методы: connect (здесь произвожу распознавание адреса сервера и подключение); write ( просто write в сокет ); read ( просто read из сокета ); сокет - TCP типа. Ситуация такая - если просто писать сообщение в сокет, то оно остается во внутреннем буфере и не передается, пока не завершить клиента по ^С. Если же добавить \r\n в конец сообщения, то оно передается. ВОПРОС - почему так работает и чем определяется такое "поведение". Со стороны сервера - если писать в клиент "сообщение" с помощью print и заканчивать \r\n а затем выдать клиенту приглашение типа "> " с помощью следующей команды print, то клиент может прочитать либо все, либо только "сообщение"\r\n. Эта фигня исчезает, если объединить две print в одну - например print( $client, "сообщение\r\n> "). С одной стороны как бы ясно, что при этом происходит передача всей последовательности символов за раз, но в середине есть \r\n и строка не заканчивается никакими ограничителями. Опять же ВОПРОС - почему. Кто готов поделиться опытом или же знает где почитать про это, мыльте плиз peter@sbank.elcom.ru (ICQ#8809276)

anonymous

Hint: Buffered I/O.

Dlja Perla poprobui:

select(SOCKET);

$| = 1;

Dlja C++ - 4ert znaet, write/read po-idee, ne dolzhen bufferizirovat'sja, odnako vse priznaki nalitco... Dlja C eto funkcii setvbuf/setlinebuff() nu i fflush() kak primer...

BaT ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.