recvfrom不能获取客户端正确位置的问题

服务器端代码: n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(structaddr*)&addr,&addrlen); 客户端向服务器端发送msg后,服务器端能收到,但是,在服务器端不能获取正确的发送方的IP地址。 解决: n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(structaddr*)&addr,&addrlen); 在调用recvfrom()之前,加上:addrlen = sizeof(struct sockaddr);即可(之前声明 int addrlen; )。
PHP可以通过SNTP协议获取NTP服务器的时间信息。以下是一个简单的示例代码,演示如何使用PHP获取NTP服务器时间信息: ```php <?php $host = "ntp.server.com"; // NTP服务器地址 $port = 123; // NTP服务器端口,默认为123 $timeout = 5; // 连接超时时间,单位为秒 // 创建UDP套接字 $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); // 设置超时时间 socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); // 构造NTP协议请求包 $request = "\x1b" . str_repeat("\0", 47); // 发送请求包到NTP服务器 socket_sendto($socket, $request, strlen($request), 0, $host, $port); // 接收NTP服务器响应 $packet = ''; $from = ''; $port = 0; socket_recvfrom($socket, $packet, 48, 0, $from, $port); // 关闭套接字 socket_close($socket); // 解析NTP协议响应包 $timestamp = unpack('N12', $packet); $timestamp -= 2208988800; // 输出NTP服务器时间信息 echo "NTP服务器地址:$host<br>"; echo "NTP服务器端口:$port<br>"; echo "NTP服务器时间:".date("Y-m-d H:i:s", $timestamp[10])."<br>"; ``` 要将上述代码用于HTML页面中,可以将其保存为一个PHP文件,然后在HTML页面中使用`<iframe>`标签嵌入PHP文件即可。例如: ```html <iframe src="ntp.php" width="100%" height="200"></iframe> ``` 对于NTP服务器是否正常运行的判断,可以在上述PHP代码的基础上,增加对NTP服务器响应的判断。如果NTP服务器响应超时或者响应数据格式不正确,就可以认为NTP服务器异常。例如: ```php // 发送请求包到NTP服务器 if (socket_sendto($socket, $request, strlen($request), 0, $host, $port) === false) { // 发送失败,NTP服务器异常 echo "NTP服务器异常!<br>"; } else { // 接收NTP服务器响应 $packet = ''; $from = ''; $port = 0; if (socket_recvfrom($socket, $packet, 48, 0, $from, $port) === false) { // 接收超时,NTP服务器异常 echo "NTP服务器异常!<br>"; } else { // 解析NTP协议响应包 $timestamp = unpack('N12', $packet); $timestamp -= 2208988800; // 输出NTP服务器时间信息 echo "NTP服务器地址:$host<br>"; echo "NTP服务器端口:$port<br>"; echo "NTP服务器时间:".date("Y-m-d H:i:s", $timestamp[10])."<br>"; } } // 关闭套接字 socket_close($socket); ``` 在HTML页面中,可以根据PHP代码输出的内容,判断NTP服务器是否正常运行。例如,如果PHP代码输出了"NTP服务器异常!",就可以认为NTP服务器异常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值