Flask接口签名sign原理与实例代码浅析
363
2022-06-17
服务端代码server.php
//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
/**
* 第一个参数说明:
* AF_UNIX(本机通信)
* AF_INET(TCP/IP – IPv4)
* AF_INET6(TCP/IP – IPv6)
* 第二个参数说明:
* SOCK_STREAM(TCP流)
* SOCK_DGRAM(UDP数据报)
* SOCK_RAW(原始套接字)
* 第三个参数说明:
* 如果第二个参数选择的是TCP,则传递SOL_TCP否则就SOL_UDP
*/
if (!$socket) {
echo 'create socket error' . PHP_EOL;
} else {
echo 'create socket success' . PHP_EOL;
}
/**
* 因为一台主机可能存在多个 ip 地址,所以你需要指定你的 socket 监听的是哪一个,
* 常用的值为 127.0.0.1,或者是监听所有地址 0.0.0.0,
* 那么这里可能有人不明白了,127.0.0.1 和 0.0.0.0 有啥区别呢?
* 127.0.0.1 只是一个回环地址,只能用于本机访问,说白了就是自己玩自己的,因为这个 ip 不对外部开放,所以别人也就无法访问这个地址,
* 所以如果你的服务器地址设置为 127.0.0.1,别人想要访问,只能去屎吧。
* 0.0.0.0 严格来说不算是一个 ip 地址,它的意思是本机的所有 IP 地址,都是我的,哈哈。
*/
//绑定ip和端口
$addr = '127.0.0.1';
$port = 8080;
if (socket_bind($socket, $addr, $port)) {
echo 'bind addr success' . PHP_EOL;
} else {
echo 'bind addr error' . PHP_EOL;
}
//监听套接字
if (!socket_listen($socket)) {
echo 'listen socket error' . PHP_EOL;
} else {
echo 'listen socket success' . PHP_EOL;
}
//接受客户端连接
$client = socket_accept($socket);
if (!$client) {
echo 'socket_accept error' . PHP_EOL;
} else {
echo 'socket_accept success' . PHP_EOL;
//接受客户端返回内容
while (true) {
//第一个参数是客户端套接字 第二个参数从socket中获取的数据 第三个参数是设置长度最多为 len 字节的数据将被接收。
$bytesNum = socket_recv($client, $buffer, 100, 0);
if (!$bytesNum) {
echo "socket_recv failed" . PHP_EOL;
exit(1);
} else {
echo "content from client:" . $buffer . PHP_EOL;
}
}
}
客户端代码client.php
//创建socket套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//连接套接字
if (!socket_connect($socket, '127.0.0.1', 8080)) {
echo 'socket connect error' . PHP_EOL;
exit(1);
} else {
while (true) {
//阻塞进程获取输入内容
$data = fgets(STDIN);
//如果用户输入quit,那么退出程序 这里要去除下空格 因为回车会造成换行符
if (trim($data) == 'quit') {
socket_close($socket);
break;
}
//发送数据给服务端
socket_write($socket, $data);
}
}
这里先运行php server.php,然后运行php client.php,然后输入内容,服务端就能接受到了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~