IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP TcpServer和Client 收发十六进制和字符串 超时及等待用户输入 -> 正文阅读

[PHP知识库]PHP TcpServer和Client 收发十六进制和字符串 超时及等待用户输入

使用方法:

cd?C:\phpStudy\php53

php C:\Users\Administrator\Desktop\chenhao\TcpServer.php

?

TcpServer收发十六进制和字符串?

<?php

//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//设置阻塞模式
socket_set_block($socket);
//为套接字绑定ip和端口
socket_bind($socket,'192.168.100.1',18899);
//监听socket
socket_listen($socket,4);
echo "tcp server listen port: 18899 \n";
while(true)
{

    //接收客户端请求
    if(($msgsocket = socket_accept($socket)) !== false)
    {
    	 	//$str = "this is a service message";
        //向连接的客户端发送数据
        //socket_write($msgsocket, $str,strlen($str));
        
        $sendStr = '01 03 00 20 00 02 C5 C1';  // 16进制数据
        echo "TcpServer:".$sendStr."\n";
				$sendStrArray = str_split(str_replace(' ', '', $sendStr), 2);  // 将16进制数据转换成两个一组的数组
        //向连接的客户端发送数据 
				for ($j = 0; $j < count($sendStrArray); $j++) {

					socket_write($msgsocket, chr(hexdec($sendStrArray[$j])));  // 逐组数据发送
				}
				
        //读取请求内容
        //$buf = socket_read($msgsocket, 8192,PHP_BINARY_READ);
        //echo "Received msg: $buf \n";
        
        $receiveStr = "";
				$receiveStr = socket_read($msgsocket, 1024, PHP_BINARY_READ);  // 采用2进制方式接收数据
				$receiveStrHex = bin2hex($receiveStr);  // 将2进制数据转换成16进制
				echo "Client:" . $receiveStrHex ."\n";
  
        //操作完之后需要关闭该连接否则 feof() 函数无法正确识别打开的句柄是否读取完成
        socket_close($msgsocket);
    }
}

Client 收发十六进制和字符串

<?php
$sendStr = '01 03 00 20 00 02 C5 C1';  // 16进制数据
$sendStrArray = str_split(str_replace(' ', '', $sendStr), 2);  // 将16进制数据转换成两个一组的数组
$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp"));  // 创建Socket
echo "正在连接:\n"
if (socket_connect($socket, "192.168.100.1", 18899)) {  //连接
for ($j = 0; $j < count($sendStrArray); $j++) {

	socket_write($socket, chr(hexdec($sendStrArray[$j])));  // 逐组数据发送
}

//向打开的套集字写入数据(发送数据)
//$st="socket send message";
//$length = strlen($st);
//$s = socket_write($socket, $st, $length);
//从套接字中获取服务器发送来的数据
//$msg = socket_read($socket,8190);
//echo $msg;
$receiveStr = "";
$receiveStr = socket_read($socket, 1024, PHP_BINARY_READ);  // 采用2进制方式接收数据
$receiveStrHex = bin2hex($receiveStr);  // 将2进制数据转换成16进制
echo "client:" . $receiveStrHex;
}
socket_close($socket);  // 关闭Socket
?>

超时及等待用户输入

<?php

//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//设置阻塞模式
socket_set_block($socket);
//为套接字绑定ip和端口
//socket_bind($socket,'192.168.254.191',18899);
socket_bind($socket,'192.168.100.1',18899);
//监听socket
socket_listen($socket,4);
echo "tcp server listen port: 18899 \n";
while(true)
{

    //接收客户端请求
    if(($msgsocket = socket_accept($socket)) !== false)
    {
	    		socket_set_option($msgsocket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>3, "usec"=>0 ) ); //发送超时
				  socket_set_option($msgsocket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>3, "usec"=>0 ) );//接收超时
			  
  			  $receiveStr = "";
					$receiveStr = socket_read($msgsocket, 1024, PHP_BINARY_READ);  // 采用2进制方式接收数据
					
					$receiveStrHex = bin2hex($receiveStr);  // 将2进制数据转换成16进制
					echo "Client:" . $receiveStrHex ."\n";

					
					
				while(true)
				{
						 fgets(STDIN); //等待用户输入回车
							$sendStr = '01 03 00 20 00 02 C5 C1';  // 16进制数据
			        echo "TcpServer:".$sendStr."\n";
							$sendStrArray = str_split(str_replace(' ', '', $sendStr), 2);  // 将16进制数据转换成两个一组的数组
			        //向连接的客户端发送数据
			        $str="";
							for ($j = 0; $j < count($sendStrArray); $j++) {
								$str=$str.chr(hexdec($sendStrArray[$j]));  // 逐组数据拼接
							}		
							socket_write($msgsocket,$str,strlen($str)); //一起发送
							
							fgets(STDIN); //等待用户输入回车
			
						  $receiveStr = "";
							$receiveStr = socket_read($msgsocket, 1024, PHP_BINARY_READ);  // 采用2进制方式接收数据
							$receiveStrHex = bin2hex($receiveStr);  // 将2进制数据转换成16进制
							if(strlen($receiveStrHex)>0)
							{
									echo "Client:" . $receiveStrHex ."\n";//010304 011d 0234 6b7e
									$sendStrArray = str_split(str_replace(' ', '', $receiveStrHex), 2);  // 将16进制数据转换成两个一组的数组
									for ($j = 0; $j < count($sendStrArray); $j++) {
											echo $sendStrArray[$j]." \n";  // 逐组数据发送
									}
									if(count($sendStrArray)==9)
									{
											echo "Client解析:\n温度:".( (hexdec($sendStrArray[3])*256+hexdec($sendStrArray[4]))/10 )."度,湿度:".(hexdec($sendStrArray[5])*256+hexdec($sendStrArray[6]))/10 ."%\n"; 
									}
							}

      }
        //操作完之后需要关闭该连接否则 feof() 函数无法正确识别打开的句柄是否读取完成
        socket_close($msgsocket);
    }
}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-27 15:59:34  更:2021-07-27 16:00:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 2:10:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码