php中socket的使用

一、开启socket

phpinfo();查看是否开启了socket扩展,否则在php.ini中开启。

二、服务器端代码的写法

<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();$address = '127.0.0.1';
$port = 10005;
//创建端口
if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n"; } //绑定 if (socket_bind($sock, $address, $port) === false) { echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n"; } //监听 if (socket_listen($sock, 5) === false) { echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n"; } do { //得到一个链接 if (($msgsock = socket_accept($sock)) === false) { echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n"; break; } //welcome 发送到客户端 $msg = "<font color='red'>server send:welcome</font><br/>"; socket_write($msgsock, $msg, strlen($msg)); echo 'read client message\n'; $buf = socket_read($msgsock, 8192); $talkback = "received message:$buf\n"; echo $talkback; if (false === socket_write($msgsock, $talkback, strlen($talkback))) { echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n"; } else { echo 'send success'; } socket_close($msgsock); } while(true); //关闭socket socket_close($sock); ?>

服务器端需要在cli模式是执行,有可能cli模式下php.ini文件载入的不一样

可以像如下输出

image

这时候在zhoxh目录下就有个tem.text文件。查看 Configuration File (php.ini) Path => C:\WINDOWS 。不是我的php.ini 文件,这说明调用的php.ini文件时错误的。这时候我们要指定php.ini文件命令如下

image

注意的是我的php可以直接执行时配置了环境变量。

 

三、客户端

<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>\n";
$service_port = 10005;
$address = '127.0.0.1';$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK. \n"; } echo "Attempting to connect to '$address' on port '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if($result === false) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK \n"; } $in = "HEAD / http/1.1\r\n"; $in .= "HOST: localhost \r\n"; $in .= "Connection: close\r\n\r\n"; $out = ""; echo "sending http head request ..."; socket_write($socket, $in, strlen($in)); echo "OK\n"; echo "Reading response:\n\n"; while ($out = socket_read($socket, 8192)) { echo $out; } echo "closeing socket.."; socket_close($socket); echo "ok .\n\n";
 
执行结果: 
server:

image


client:

image

转载于:https://www.cnblogs.com/phpaline/p/4110706.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第 1-3 课:深入理解字符串 + 面试题

字符串介绍 字符串是程序开发当中,使用最频繁的类型之一,有着与基础类型相同的地位,甚至在 JVM(Java 虚拟机)编译的时候会对字符串做特殊的处理,比如拼加操作可能会被 JVM 直接合成为一个最终的字符串,从而到达高效运行的目的。 1 String 特性 String 是标准的不可变类…

清空session的方法

清空session的方法&#xff0c;常用来注销的时候清空所有的session. 方法一&#xff1a; Enumeration esession.getAttributeNames(); while(e.hasMoreElements()){ String sessionName(String)e.nextElement(); System.out.println("存在的session有&#xff1a;"…

输入输出数组元素的函数重载_C ++函数重载| 查找输出程序| 套装3

输入输出数组元素的函数重载Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Test {public:void fun(){cout << "Fun() called" << endl;}void fun(int num){cout << num << endl;}};int main(){Test T;…

通过xss所引起的信息泄露,防不胜防!

话不多说直接上&#xff1a; 信息搜集,通过google语法 site:"*.redacted.com"优化一下: site:"*.redacted.com" -www -blog -mail之后&#xff0c;利用subfinder、assetfinder和masass等被动枚举工具收集与目标相关的子域列表&#xff0c;并将它们保存在…

二叉树的前序、中序、后续、层序遍历(包含递归与非递归)

递归形式 递归形式遍历比较简单&#xff0c;不做详细论述。 前序遍历 void Preorder(treenode* root) //前序 {if (root ! NULL){printf("%c", root->data);Preorder(root->left);Preorder(root->right);}中序遍历 } void Inorder(treenode* root) …

第 1-6 课:玩转时间 + 面试题

在 JDK 8 之前,Java 语言为我们提供了两个类用于操作时间,它们分别是:java.util.Date 和 java.util.Calendar,但在 JDK 8 的时候为了解决旧时间操作类的一些缺陷,提供了几个新的类,用于操作时间和人气,它们分别是:LocalTime、LocalDateTime、Instant,都位于 java.time…

单调递增子序列

单调子序列包含有单调递增子序列和递减子序列&#xff0c;不失一般性&#xff0c;这里只讨论单调递增子序列。首先&#xff0c;从定义上明确我们的问题。给定序列a1, a2, …, an&#xff0c;如果存在满足下列条件的子序列 ai1<ai2<…<aim, (其中i1<i2<…<im)…

HTML文本框内容发生变化时引发事件执行

最近在做的程序中需要这样的一个功能:当HTML文本框内容生发变化时执行JavaScript函数.最初的想法是使用onchange,但这个事件只有当文本框失去焦点时才会触发,后来就找到了onpropertychange事件.如下:<input id"textRoad" type"text" size"15"…

第 1-5 课:深入了解 Java 中的异常处理 + 面试题

在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点。比如,try-catch 处理要遵循的原则是什么,finally 为什么总是能执行,try-catch 为什么比较消耗程序的执行性能等问题,我们本篇内容都会给出相应的答案,当然还有面试中经常被问到…

java math 类_Java Math类静态双层(double d)示例

java math 类数学班静态双层(双D) (Math Class static double floor(double d)) This method is available in java.lang package. 此方法在java.lang包中可用。 In this method if the value of the given positive argument after decimal point is 0 or greater than 0 so i…

在win server 2003上安装SQL Server 2008的步骤

1.安装Microsoft .NET Framework 3.5 Service Pack 1&#xff0c;下载地址&#xff1a;http://www.microsoft.com/zh-cn/download/confirmation.aspx?id22 2.运行SQL Server 2008安装包&#xff0c;安装过程中会提示需要重启&#xff0c;手动重启。 3.重启后若直接再次运行SQL…

使用onclick跳转到其他页面/跳转到指定url

如果是本页显示可以直接用location,方法如下&#xff1a;①οnclick"javascript:window.location.hrefURL"②οnclick"locationURL"③οnclick"window.location.hrefURL?id11"如果页面中有frame可以将在location前面添加top.mainframe.frames[r…

第 2-1 课:类与 Object + 面试题

类介绍 Java 程序是由若干个类组成的,类也是面向对象编程思想的具体实现。 以下为类的基本使用: public class Cat {// 私有属性private String name;private int age;// 构造方法public Cat() {}// 普通方法public void eat() {System.out.println("吃吃吃");}…

expm1_Java Math类静态double expm1(double d)及其示例

expm1数学类静态double expm1(double d) (Math Class static double expm1(double d)) This method is available in java.lang package. 此方法在java.lang包中可用。 This method is used to return [ the exponential of the given number – 1] in the method or in other …

51单片机常用功能及相关内容

一、基本概念&#xff1a; 1、引脚 图1.1 这里只介绍常用及主要的引脚。 I/O口引脚&#xff1a;P0、P1、P2、P3 P0口&#xff1a;39脚~32脚&#xff0c;双向8位三态I/O口&#xff0c;每个口可独立控制&#xff0c;但内部无上拉电阻&#xff0c;为高阻态&#xff0c;故不能正常…

No monitoring data is available

No monitoring data is available because monitoring is not enabled for this deployment share...注解&#xff1a;没有监测数据是可用的。报错具体信息如下&#xff1a;Assembly: mscorlib Assembly Version: 2.0.0.0 File Version: 2.0.50727.5420 (Win7SP1.050727-5400…

oracle chr()和字符连接

SQL> select chr(105)||chr(32)||chr(108)||chr(111)||chr(118)||chr(101)||chr(32)||chr(121)||chr(111)||chr(117) as hi from dual;

第 1-7 课:数组和排序算法 + 面试题

数组的定义与使用 数组是 Java 编程中最重要的数据结构之一,也是最基本的数据结构,Java 中的常用集合 ArrayList、HashMap 等内部的实现都使用到了数组结构。数组是只能用来存储一种类型的集合,可以通过下标访问数值中的所有元素。 数组的声明方式有以下两种,如整数型数组…

gethours_日期getHours()方法以及JavaScript中的示例

gethoursJavaScript Date getHours()方法 (JavaScript Date getHours() method) getHours() method is a Dates class method and it is used to get the only hours from current time. getHours()方法是Date的类方法&#xff0c;用于获取距当前时间仅有的小时数。 It accept…

单词助手(可联网)

基本功能 1. 可实现对本地词库添加、删除单词功能 2. 可实现查词功能&#xff0c;根据英文查释义&#xff0c;优先从本地词库查询&#xff0c;如果本地词库没有就自动网上查询&#xff0c;并将其添加至本地词库 3. 可实现学习功能&#xff0c;每天50词&#xff0c;可分批次学习…