当前位置:首页 > PHP教程 > php函数 > 列表

使用socket系列函数实现连接TCP服务

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-01 09:05:51 浏览: 评论:0 

首先需要先有一个 tcp 服务,我们使用 php中的 socket 系列函数实现。

  1. <?php 
  2.  
  3. //创建socket套接字 
  4.  
  5. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
  6.  
  7. //设置阻塞模式 
  8.  
  9. socket_set_block($socket); 
  10.  
  11. //为套接字绑定ip和端口 
  12.  
  13. socket_bind($socket,'127.0.0.1',3046); 
  14.  
  15. //监听socket 
  16.  
  17. socket_listen($socket,4); 
  18.  
  19. while(true) 
  20.  
  21.  
  22.     //接收客户端请求 
  23.  
  24.     if(($msgsocket = socket_accept($socket)) !== false) 
  25.  
  26.     { 
  27.  
  28.         //读取请求内容 
  29.  
  30.         $buf = socket_read($msgsocket, 8192); 
  31.  
  32.         echo "Received msg: $buf \n"
  33.  
  34.         $str = "this is a service message"
  35.  
  36.         //向连接的客户端发送数据  
  37.  
  38.         socket_write($msgsocket$str,strlen($str)); 
  39.  
  40.         //操作完之后需要关闭该连接否则 feof() 函数无法正确识别打开的句柄是否读取完成 
  41.  
  42.         socket_close($msgsocket); 
  43.  
  44.     } 
  45.  

连接 tcp 服务:

使用 socket 系列函数连接

  1. <?php 
  2.  
  3. $st="socket send message"
  4.  
  5. $length = strlen($st); 
  6.  
  7. //创建tcp套接字 
  8.  
  9. $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP); 
  10.  
  11. //连接tcp 
  12.  
  13. socket_connect($socket'127.0.0.1',3046); 
  14.  
  15. //向打开的套集字写入数据(发送数据) 
  16.  
  17. $s = socket_write($socket$st$length); 
  18.  
  19. //从套接字中获取服务器发送来的数据 
  20.  
  21. $msg = socket_read($socket,8190); 
  22.  
  23. echo $msg
  24.  
  25. //关闭连接 
  26.  
  27. socket_close($socket); 

使用socket系列函数实现连接TCP服务

使用 fsockopen 连接

  1. <?php 
  2.  
  3. //使用 fsockopen 打开tcp连接句柄 
  4.  
  5. $fp = fsockopen("tcp://127.0.0.1",3046); 
  6.  
  7. $msg = "fsockopen send message"
  8.  
  9. //向句柄中写入数据 
  10.  
  11. fwrite($fp,$msg); 
  12.  
  13. $ret = ""
  14.  
  15. //循环遍历获取句柄中的数据,其中 feof() 判断文件指针是否指到文件末尾 
  16.  
  17. while (!feof($fp)){ 
  18.  
  19.     stream_set_timeout($fp, 2); 
  20.  
  21.     $ret .= fgets($fp, 128); 
  22.  
  23.  
  24. //关闭句柄 
  25.  
  26. fclose($fp); 
  27.  
  28. echo $ret

使用socket系列函数实现连接TCP服务

使用 stream_socket_client 连接

  1. <?php 
  2.  
  3. //使用 stream_socket_client 打开 tcp 连接 
  4.  
  5. $fp = stream_socket_client("tcp://127.0.0.1:3046"); 
  6.  
  7. $msg = "fsockopen send message"
  8.  
  9. //向句柄中写入数据 
  10.  
  11. fwrite($fp,$msg); 
  12.  
  13. $ret = ""
  14.  
  15. //循环遍历获取句柄中的数据,其中 feof() 判断文件指针是否指到文件末尾 
  16.  
  17. while (!feof($fp)){ 
  18.  
  19.     stream_set_timeout($fp, 2); 
  20.  
  21.     $ret .= fgets($fp, 128); 
  22.  
  23.  
  24. //关闭句柄 
  25.  
  26. fclose($fp); 
  27.  
  28. echo $ret

使用socket系列函数实现连接TCP服务

Tags: socket TCP服务

分享到: