php本地用虚拟机怎么模拟socket啊 - 爱问答

(爱问答)

php本地用虚拟机怎么模拟socket啊

我这个ip应该怎么写  写成虚拟机的ip么php本地用虚拟机怎么模拟socket啊

 

1、测试环境
服务器ip:192.168.150.1
客户端ip:192.168.150.2
2、测试过程:
客户端服务器将在本机(192.168.150.2)通过socket发送数据到服务端(192.168.150.2)的socket服务器上,服务端接收到客户端发送的数据后返回一些信息给客户端。
3、服务端文件内容:
#server.php
<?php
//获取tcp协议号码
$tcp = getprotobyname("tcp");  
// 建立server端socket ,创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端。
$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
//绑定要监听的ip和端口,这里绑定的ip一定要写局域网ip,写成127.0.0.1客户端将无法与服务端建议连接。
socket_bind($socket, '192.168.150.1', 10008);    
//监听端口    
socket_listen($socket);    
//初始化一个数据,和客户端通信
$buffer = "connect";
while (true) {
   // 接受客户端请求过来的一个socket连接
   $connection = socket_accept($socket);
   if(!$connection){
       echo "connect faild";
   }else{
           echo "Socket connected ";
           // 向客户端传递一个信息数据
           if ($buffer != "") {
               echo "send data to client ";
               socket_write($connection, $buffer . " ");
               echo "Wrote to socket ";
           } else {
               echo "no data in the buffer " ;
           }
           // 从客户端获取得的数据
           while ($data = @socket_read($connection, 1024, php_NORMAL_READ)) {
                   printf("Buffer: " . $data . " ");
              //取得信息给客户端一个反馈, Thank you client, you data is  Received success发给客户端的回应信息。
                   socket_write($connection, "Thank you client, you data is  Received success ");
           }
   }
   //关闭 socket
   socket_close($connection);
   printf("Closed the socket ");
}
?>
4、客户端文件内容:
client.php
<?php
// 建立客户端的socet连接
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
 //连接服务器端socket
$connection = socket_connect($socket, '192.168.150.1', 10008);  
//要发送到服务端的信息。
$send_data = "This data will Send to server!";
//客户端去连接服务端并接受服务端返回的数据,如果返回的数据保护not connect就提示不能连接。
while ($buffer = @socket_read($socket, 1024, php_NORMAL_READ)) {
   if (preg_match("/not connect/",$buffer)) {
       echo "don`t connect ";
       break;
   } else {
       //服务端传来的信息
       echo "Buffer Data: " . $buffer . " ";
       echo "Writing to Socket ";
       // 将客户的信息写到通道中,传给服务器端
       if (!socket_write($socket, "$send_data ")) {
           echo "Write failed ";
       }
       //服务器端收到信息后,客户端接收服务端传给客户端的回应信息。
       while ($buffer = socket_read($socket, 1024, php_NORMAL_READ)) {
               echo "sent to server:$send_data response from server was:" . $buffer . " ";
       }        
   }
}
?>
5、在服务端socket服务启动进程。
#/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
6、服务端启动后查看启动的进程及端口。
#netstat -tnlp |grep 10008
tcp        0      0 192.168.150.13:10008        0.0.0.0:*                   LISTEN      28892/php
7、在客户端(192.168.1.2)上执行传输
#/usr/local/php/bin/php -a  client.php
Interactive mode enabled
Buffer Data: connect
Writing to Socket
sent to server:This data will Send to server!
response from server was:Thank you client, you data Information Received
8、回到服务端上查看接收到的信息。
#/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
Socket connected
send data to client
Wrote to socket
Buffer: This data will Send to server!
9、参考资料
socket_create()函数需要三个参数:一个协议、一个socket类型、一个公共协议。socket_create()函数运行成功返回一个包含socket的资源类型,如果没有成功则返回false。

虚拟空间基本上屏蔽了这个函数来防止phpddos,更换vps或者使用其他函数代替。

相关标签:php

下一篇:geforceexperience遇到错

上一篇:易语言源程序加密了,然后打密码也进不去为什么

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?