Отправка пакетов на сервер

phasma

Новичок
Отправка пакетов на сервер

Проблема в том, что строка, посылаемая, состоит из 65 символов, но при отправке, пакет уходит из 168 байт

вот код:

PHP:
$_buff="\x00\x0B\xBE\xA4\xB1\x40\x00\xA0\xC5\x56\x6B\xF4\x88\x64\x11\x00\x04\xC1\x00\x2D\x00\x21\x45\x00\x00\x2B\x8B\xAD\x00\x00\x80\x11\xB3\x9B\x50\x52\x3A\xD2\x50\x52\x20\x03\x12\xE7\x6D\x38\x00\x17\x4C\x6D\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x0A\x00";

$sock = fsockopen("udp://q3.play.vsi.ru", 27960);
 if($sock)
 {


	fputs($sock, $_buff, 65);

	while (!feof($sock)) 
	{
		$_data.=fgets($sock, 65);
	}

	fclose($sock);

 }

echo strlen($_buff);
что не так ?
 

AndreyKl

Новичок
Похоже дело именно в том, что их 168...

-~{}~ 14.06.06 22:15:

<?php

$_buff="\x00\x0B\xBE\xA4\xB1\x40\x00\xA0\xC5\x56\x6B\xF4\x88\x64\x11\x00\x04\xC1\x00\x2D\x00\x21\x45\x00\x00\x2B\x8B\xAD\x00\x00\x80\x11\xB3\x9B\x50\x52\x3A\xD2\x50\x52\x20\x03\x12\xE7\x6D\x38\x00\x17\x4C\x6D\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x0A\x00";
$ar = Array(0x00,0x0B,0xBE,0xA4,0xB1,0x40,0x00,0xA0,0xC5,0x56,0x6B,0xF4,0x88,0x64,0x11,0x00,0x04,0xC1,0x00,0x2D,0x00,0x21,0x45,0x00,0x00,0x2B,0x8B,0xAD,0x00,0x00,0x80,0x11,0xB3,0x9B,0x50,0x52,0x3A,0xD2,0x50,0x52,0x20,0x03,0x12,0xE7,0x6D,0x38,0x00,0x17,0x4C,0x6D,0xFF,0xFF,0xFF,0xFF,0x67,0x65,0x74,0x73,0x74,0x61,0x74,0x75,0x73,0x0A,0x00);

$sock = fsockopen("127.0.0.1", 27960);
if($sock)
{


for( $i=0;$i<count($ar);$i++)
{
fputs($sock, chr($ar[$i]), 1);
}
/*
$j=0;
while (!feof($sock))
{
$j++;
$_data.=fgets($sock, 65);
}
*/
fclose($sock);

}

echo $i;
?>

-~{}~ 14.06.06 22:20:

Упс.. не та кнопка. Попробовал редактировать - не дали. Модераторы, пожалуйста, удалите предыдущий мой пост.

Попробуй так. Вроде 65.

PHP:
<?php

$_buff="\x00\x0B\xBE\xA4\xB1\x40\x00\xA0\xC5\x56\x6B\xF4\x88\x64\x11\x00\x04\xC1\x00\x2D\x00\x21\x45\x00\x00\x2B\x8B\xAD\x00\x00\x80\x11\xB3\x9B\x50\x52\x3A\xD2\x50\x52\x20\x03\x12\xE7\x6D\x38\x00\x17\x4C\x6D\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x0A\x00";
$ar = Array(0x00,0x0B,0xBE,0xA4,0xB1,0x40,0x00,0xA0,0xC5,0x56,0x6B,0xF4,0x88,0x64,0x11,0x00,0x04,0xC1,0x00,0x2D,0x00,0x21,0x45,0x00,0x00,0x2B,0x8B,0xAD,0x00,0x00,0x80,0x11,0xB3,0x9B,0x50,0x52,0x3A,0xD2,0x50,0x52,0x20,0x03,0x12,0xE7,0x6D,0x38,0x00,0x17,0x4C,0x6D,0xFF,0xFF,0xFF,0xFF,0x67,0x65,0x74,0x73,0x74,0x61,0x74,0x75,0x73,0x0A,0x00);

$sock = fsockopen("127.0.0.1", 27960);
 if($sock)
 {


    for( $i=0;$i<count($ar);$i++)
    {
        fputs($sock, chr($ar[$i]), 1);
    }

    $j=0;
    while (!feof($sock))
    {
        $j++;
        $_data.=fgets($sock, 65);
    }

    fclose($sock);

 }

echo $i;
echo "<br>".$j;
?>
 
Re: Отправка пакетов на сервер

Автор оригинала: phasma
Проблема в том, что строка, посылаемая, состоит из 65 символов, но при отправке, пакет уходит из 168 байт
Пакет содержит еще и служебную информацию. Чем ты смотришь пакеты?
 

phasma

Новичок
да .. проблема была в этом ))) только потом дошло, что слал я полностью весь пакет ... только вот опять проблема

while (!feof($sock))
{
$_data.=fgets($sock, 65);
}

зацикливается при передаче данных на сервер, через UDP ... проблема, в том, что почему-то нету окончания у $sock ... вернее тех данных, которые принимаются, как это можно решить ?
 
Вверху и здесь сначало надо $_data=''; На другом конце когда закрывается соединение?
 
У тебя двоичные данные, может попробовать fread? stream_set_blocking не используешь?
 

phasma

Новичок
Но у fread нужно использовать еще один параметр, который задает размер получаемого куска ...

stream_set_blocking пробовал, безрезультатно ...

-~{}~ 15.06.06 14:15:

PHP:
<?
$_buff="\xFF\xFF\xFF\xFF\x67\x65\x74\x73\x74\x61\x74\x75\x73\x0A\x00";


$sock = fsockopen("udp://q3dm6.ru", 27960); 

if($sock) 
{ 

	fwrite($sock, $_buff); 

	stream_set_timeout($sock, 0);

	while(!feof($sock))
	{ 
        
		$_data=fread($sock, 128);
		$_info.=$_data;
		if($_data=='' && $_info!==''){ break; }
	} 

fclose($sock); 


} 

echo $_info;

?>
вот такую вещь соорудил, вроде работает ... потестирую, может правда работает корректно )))
 

insidex

флихтэръер
Извиняюсь,что немножко не по теме. Можно ли как-нибудь указать на приемной стороне прочитать только поле данных у ip пакета, а не выводить подряд все заголовки.

зы. Размер заголовков заранее не известен.
 
Сверху