Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Передача массива, через сокет.
 
 автор: yello   (22.10.2009 в 21:18)   письмо автору
 
 

Всем доброе время, суток.
Вопрос, можно предать массив через сокет, и принять его как массив?
Передача строки через сокет, неподходит, надо именно массив.
Допустим

$address="192.168.0.112";
$port=1001;
$timeout=5;
$sock=fsockopen($address, $port, $errno, $errstr, $timeout);
fputs($sock, $massiv);
где $massiv=array(0,0,23,255,81,3,23,0,0,32); а не строка "0 0 23 225 81 3 23 0 0 32";
и принять
$mas=fgets($sock,2048)
где $mas - тоже массив, как и $massiv и можно обращаться к любому элементу $mas[1], $mas[2], $mas[3].

  Ответить  
 
 автор: Волки   (22.10.2009 в 21:24)   письмо автору
 
   для: yello   (22.10.2009 в 21:18)
 

а serialize не подойдет?

  Ответить  
 
 автор: yello   (22.10.2009 в 21:26)   письмо автору
 
   для: Волки   (22.10.2009 в 21:24)
 

а в двух словах можно, что это такое или ссылку?

  Ответить  
 
 автор: Волки   (22.10.2009 в 21:31)   письмо автору
 
   для: yello   (22.10.2009 в 21:26)
 

http://ru2.php.net/manual/en/function.serialize.php
функция преобразует массив (да и любой объект тоже) любой сложности в строку.
есть и обратная функция, см мануал.

  Ответить  
 
 автор: Trianon   (22.10.2009 в 23:02)   письмо автору
 
   для: yello   (22.10.2009 в 21:18)
 

Ответ на вопрос в общем случае определяется протоколом обмена и форматом данных, который ожидает и который поставляет сервер, слушающий этот сокет (192.168.0.112:1001)

php-массив в чистом виде определен лишь в терминах php внутри него.

  Ответить  
 
 автор: yello   (23.10.2009 в 09:49)   письмо автору
 
   для: Trianon   (22.10.2009 в 23:02)
 

протокол передачи TCP
принимается на той стороне массив байт, и мне тоже будет отправлен массив байт
Мне бы array(1,0,1,23,15) - обьявить как массив байт, размер каждой ячейки 1 байт, передаваться в каждой ячейки будут только числа, от 0 до 255, и чтобы $fputs($sock,$x) - принимающая сторона приняла как массив байт,
<?php
$address="192.168.0.112";
$port=1001;
$timeout=5;
$sock=fsockopen($address, $port, $errno, $errstr, $timeout);
$massiv=array(1,0,1,23,15);
$x=serialize($massiv);
echo $x;
// a:5:{i:0;i:1;i:1;i:0;i:2;i:1;i:3;i:23;i:4;i:15;}
fputs($sock, $x);
$mas=fgets($sock,2048)
$y=unserialize($mas);
echo "$y[0] $y[1] $y[2] $y[3] $y[4]";
// 1 0 1 23 15
?>

  Ответить  
 
 автор: Trianon   (23.10.2009 в 10:57)   письмо автору
 
   для: yello   (23.10.2009 в 09:49)
 

Для такого дела придуманы функции pack и unpack .
Их основная задача - преобразовывать внутреннее представление данных во внешнее и наоборот.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования