Почему socket_write () возвращает записанные 7423 байта, а серверная часть получает только 1448 байтов? - PullRequest
1 голос
/ 16 августа 2011

Я пишу простой код сокета для записи данных с использованием socket_write () и в ответ извлекаю данные с помощью socket_read ().

Это базовая настройка, которую я имею:

  $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die ("Could not create connection");
  $socket_conn = socket_connect($socket, "some_ip", some_digit); // internal network
  $socket_params = pack('I',0) . strval($file['filename'] .'.'. $file['extension']) . pack('I', $file['size']) . pack('I', 0) . strval(File::read($file['saved_to'] . $file['saved_as'], true)) . pack('I', 0);
  $t = socket_write($socket, $socket_params, strlen($socket_params)) or die ("Could not create connection");        
  $status = unpack('I', socket_read($socket, 4));
  socket_close($socket);

После запуска я получу ошибку ErrorException [ Warning ]: unpack() [function.unpack]: Type I: not enough input, need 4, have 0. Я не уверен, почему это происходит, когда $t возвращает 7423, то есть размер, который я получу, если я var_dump($socket_params).

Однако на стороне сервера он показывает, что он получил только 1448 байт, и поэтому запрос был прекращен. На стороне сервера работает нормально с текущей реализацией PHP, поэтому я исключаю любые забавы со стороны сервера.

Я загрузил свой тестовый код в рабочий тест для тестирования (на том же сервере, что и текущий), и он возвращает ту же ошибку.

Для чего я использую FuelPHP 1.0 RC3, а текущая реализация в реальном времени использует CakePHP. Локальный компьютер - это OS X 10.6.8 (MAMP 1.9.4), а рабочий компьютер - 10.04 LTS (Apache / PHP5.3.x).

Наконец, я искал, и, поскольку у него такая же проблема на компьютере с Linux, я думаю, что это тоже можно исключить (/7488311/strannyi-raw-soket-v-mac-os-x http://sock -raw.org /apers / sock_raw ) право? Я не совсем уверен, как обойти это, если это проблема?

Заранее спасибо, я не уверен, какую другую информацию мне нужно предоставить, поскольку я впервые занимаюсь программированием сокетов. Я мог бы использовать некоторые рекомендации для отладки, так что оставь любой совет!

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