почему теряются данные при "печати" данных в сокет - PullRequest
1 голос
/ 22 июня 2010

Я использую Perl для написания приложений на основе сокетов. Я обнаружил, что если клиент инициирует две печати на ручке гнезда, как показано ниже:

print $sock "hello kitty";
#do some other stuff
print $sock "hello jack";

серверная сторона не может получить все сообщение "Hello Kitty". Я не уверен, но сильно подозреваю, что где-то происходит перезапись буфера ... поэтому у меня два вопроса

  1. почему данные теряются? это потому что «print» имеет ограниченный размер buf?
  2. как этого избежать? Я могу принять другие метод, отличный от способа печати

1 Ответ

1 голос
/ 22 июня 2010

Мое непосредственное предположение состоит в том, что сокет может находиться в режиме буферизации строки и ждет, пока вы напечатаете новую строку (или заполните буфер), прежде чем отправлять данные на другую сторону. Если это так, то print $sock "hello kitty\n"; должно работать так, как вы собираетесь.

Однако, как прокомментировал daxim, мы не можем быть уверены, не увидев весь соответствующий код, включая (но не ограничиваясь), как вы создаете сокет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...