sockets:
$fp = fsockopen('www,baidu.com', 80, $errno, $errstr, 30);
//$fp = stream_socket_client('tcp://www.baidu.com:80', $errno, $errstr);
if(!$fp) {
echo "{$errno}, {$errstr}\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.baidu.com\r\n";
$out .= "Connection: close\r\n\r\n";
fwrite($fp, $out);
$out = '';
while(!feof($fp)) {
$out .= fread($fp, 1024);
}
fclose($fp);
}
-----------------------------------------------------------------------
pthreads:
class T1 extends Thread {
function run() {
while(1) {
echo "T1\n";
sleep(1);
}
}
}
$t1 = new T1();
$t1->start();
$t1->join();
while(1) {
echo "T2\n";
sleep(1);
}
------------------------------------------------------------------------
parse binary
pack & unpack function
《PHP: 深入pack/unpack》
https://my.oschina.net/goal/blog/195749
$fp = fsockopen('1.1.1.1', 4661, $errno, $errstr, 30);
if(!$fp) {
echo "{$errno}, {$errstr}\n";
} else {
// login
$protocol_type = pack('C', 0xE3);
$message_type = pack('C', 0x01);
$user_hash = md5('abc', true);
$client_id = pack('V', 0);
$tcp_port = pack('v', 4661);
$tag_count = pack('V', 4);
$tag_name = pack('CvCva20', 0x02, 1, 0x01, 20, 'http://www.amule.org');
$tag_version = pack('CvCV', 0x03, 1, 0x11, 60);
$tag_port = pack('CvCV', 0x03, 1, 0x20, 285);
$tag_id = pack('CvCV', 0x03, 1, 0xfb, 50596992);
$message_body = $message_type . $user_hash . $client_id . $tcp_port . $tag_count . $tag_name . $tag_version . $tag_port . $tag_id;
$message_size = pack('V', strlen($message_body));
$message_header = $protocol_type . $message_size;
$message = $message_header . $message_body;
fwrite($fp, $message);
// server message
$out = '';
$out = fread($fp, 8);
$l = strlen($out);
$out = unpack('H2protocal_type/Vmessage_size/H2message_type/vstring_length', $out);
$out = fread($fp, $out['string_length']);
fclose($fp);
}
没有评论:
发表评论
注意:只有此博客的成员才能发布评论。