我想要一个PHP脚本,它允许您ping IP地址和端口号(ip:port)。我找到了类似的脚本,但是它仅适用于网站,而不适用于ip:port。
ip:port
<?php function ping($host, $port, $timeout) { $tB = microtime(true); $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); if (!$fP) { return "down"; } $tA = microtime(true); return round((($tA - $tB) * 1000), 0)." ms"; } //Echoing it will display the ping if the host is up, if not it'll say "down". echo ping("www.google.com", 80, 10); ?>
我想要一个游戏服务器。
这个想法是我可以输入IP地址和端口号,然后得到ping响应。
我认为这个问题的答案几乎可以概括您的问题。
如果您要查找给定主机是否将在端口80上接受TCP连接,则可以执行以下操作: $host = '193.33.186.70'; $port = 80; $waitTimeoutInSeconds = 1; if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){ // It worked } else { // It didn't work } fclose($fp);
如果您要查找给定主机是否将在端口80上接受TCP连接,则可以执行以下操作:
$host = '193.33.186.70'; $port = 80; $waitTimeoutInSeconds = 1; if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)){ // It worked } else { // It didn't work } fclose($fp);
对于TCP以外的任何其他东西,都会更加困难(尽管由于您指定了80,所以我想您正在寻找活动的HTTP服务器,所以TCP是您想要的)。TCP已排序并得到确认,因此成功建立连接后,您将隐式接收返回的数据包。大多数其他传输协议(通常是UDP,但也有其他传输协议)不会以这种方式运行,除非覆盖的应用层协议实现了数据报,否则不会确认数据报。 你要求以这种方式这个问题的事实告诉我,你有你的知识的根本差距传输层协议。您应该阅读ICMP和TCP以及OSI模型。
另外,这是对主机ping 的较干净的版本。
// Function to check response time function pingDomain($domain){ $starttime = microtime(true); $file = fsockopen ($domain, 80, $errno, $errstr, 10); $stoptime = microtime(true); $status = 0; if (!$file) $status = -1; // Site is down else { fclose($file); $status = ($stoptime - $starttime) * 1000; $status = floor($status); } return $status; }