用于HTTP通信的套接字TCP / IP

时间:2014-09-07 02:27:32

标签: sockets network-programming tcp-ip

以下代码是socket教程的示例php代码,我成功运行以收集远程站点或localhost网页。我用于socket_create的协议号是0或6,两者都是 数字也在处理那段代码,为什么?我认为网络编程需要将今天的窗口计算机中的TCP和IP包括在一起才能使通信成为可能。为什么只需要TCP或IP协议num可以使程序代码工作,不包括协议num? 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;
              ?>

1 个答案:

答案 0 :(得分:0)

传递0作为协议将为您提供默认协议。 AF_INET说你想要 IP协议套件(特别是IPv4)。对于AF_INET和SOCK_STREAM的组合,tcp是默认值。 AF_INET6和SOCK_DGRAM的组合将默认为IPv6和UDP。

TCP具有协议号6,如果您想要明确,也可以传递。