Следующий код является примером php-кода для учебника по сокетам, и я успешно запускаю сбор удаленного сайта или веб-страницы локального хоста. Либо номер протокола, который я использовал для socket_create, равен 0 или 6, оба номера также работают над этим кодом, почему? Я думал, что сетевое программирование должно включать TCP и IP для сегодняшнего компьютера с окном вместе, чтобы сделать связь возможной. Почему просто нужен номер протокола TCP или IP, который может заставить работать программный код, который не включает оба номера протокола? TCP — это протокол для транспортного уровня, а IP — это протокол для сетевого уровня как для модели OSI, так и для классической модели TCP/IP.
<?php
$protocol = 'tcp';
$get_prot = getprotobyname($protocol);
echo $get_prot."----protocol\n";
if(!($sock = socket_create(AF_INET, SOCK_STREAM, 6)))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Couldn't create socket: [$errorcode] $errormsg \n");
}
echo "Socket created \n";
if(!socket_connect($sock , '127.0.0.1' , 80))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not connect: [$errorcode] $errormsg \n");
}
echo "Connection established \n";
$message = "GET / HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 \r\n\r\n";
$message = "GET / HTTP/1.1\r\n";
$message .= "Host: \r\n";
$message .= "Connection: Close\r\n\r\n";
//Send the message to the server
if( ! socket_send ( $sock , $message , strlen($message) , 0))
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not send data: [$errorcode] $errormsg \n");
}
echo "Message send successfully \n";
//Now receive reply from server
if(socket_recv ( $sock , $buf , 6144 , MSG_WAITALL ) === FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg \n");
}
//print the received message
echo $buf;
?>