千家信息网

php的socket用法是什么

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容主要讲解"php的socket用法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"php的socket用法是什么"吧!关于socket编程所涉
千家信息网最后更新 2025年02月04日php的socket用法是什么

本篇内容主要讲解"php的socket用法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"php的socket用法是什么"吧!

关于socket编程所涉及到的网络协议,什么TCP啊,UDP啊,什么socket三次握手等等,这些网络协议网上有很详细的解释,这里不讲,只截个socket建立套接的过程图让你瞧瞧:

socket是怎么建立连接的呢?上面已经提到过了,它建立连接的过程是与mysql的客户端和服务端的连接本质是一样的。而它与mysql不同的是,mysql的服务端和客户端都已经为我们编辑好了,我们只要应用就行了。但是,关键时刻来啦,socket它什么东西都没有提供给我们,唯一提供给我们的就是:几十个socket函数。

这言外之意就是说,socket编程就是要我们自己创建服务端和客户端,也就是说,``socket编程``--就是要我们自己建立一个类似于mysql的服务端和客户端的应用。

在你没有被socket编程搞蒙之前,我还是让你看看socket的几个关键函数,先给你解释一下它们各自的作用。不然,要是对socket编程一点基础都没有的人看到了,怕你看了之后,就果断跳过这篇文章,从此对socket产生恐惧症了。

socket的关键函数1:

socket_create($net参数1,$stream参数2,$protocol参数3)

作用:创建一个socket套接字,说白了,就是一个网络数据流。

返回值:一个套接字,或者是false,参数错误发出E_WARNING警告

php的在线手册那里说得更清楚:

socket_create创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端。

参数1是:网络协议,

网络协议有哪些?它的选择项就下面这三个:

AF_INET:   IPv4 网络协议。TCP 和 UDP 都可使用此协议。一般都用这个,你懂的。

AF_INET6:   IPv6 网络协议。TCP 和 UDP 都可使用此协议。

AF_UNIX:   本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)。

参数2:套接字流,选项有:

SOCK_STREAM  SOCK_DGRAM  SOCK_SEQPACKET  SOCK_RAW  SOCK_RDM。

这里只对前两个进行解释:

SOCK_STREAM  TCP 协议套接字。

SOCK_DGRAM   UDP协议套接字。

欲了解更多请链接这里:http://php.net/manual/zh/function.socket-create.php

参数3:protocol协议,选项有:

SOL_TCP:  TCP 协议。

SOL_UDP:  UDP协议。

从这里可以看出,其实socket_create函数的第二个参数和第三个参数是相关联的。

比如,假如你第一个参数应用IPv4协议:AF_INET,然后,第二个参数应用的是TCP套接字:SOCK_STREAM,

那么第三个参数必须要用SOL_TCP,这个应该不难理解。

TCP 协议套接字嘛,当然只能用TCP协议了,是不是?如果你应用UDP套接字,那么第三个参数该怎么选择我就不说了,呵呵,你懂的。

关键函数2:

socket_connect($socket参数1,$ip参数2,$port参数3)

作用:连接一个套接字,返回值为true或者false

参数1:socket_create的函数返回值

参数2:ip地址

参数3:端口号

关键函数3:

socket_bind($socket参数1,$ip参数2,$port参数3)

作用:绑定一个套接字,返回值为true或者false

参数1:socket_create的函数返回值

参数2:ip地址

参数3:端口号

关键函数4:

socket_listen($socket参数1,$backlog 参数2)

作用:监听一个套接字,返回值为true或者false

参数1:socket_create的函数返回值

参数2:最大监听套接字个数

关键函数5:

socket_accept($socket)

作用:接收套接字的资源信息,成功返回套接字的信息资源,失败为false

参数:socket_create的函数返回值

关键函数6:

socket_read($socket参数1,$length参数2)

作用:读取套接字的资源信息,

返回值:成功把套接字的资源转化为字符串信息,失败为false

参数1:socket_create或者socket_accept的函数返回值

参数2:读取的字符串的长度

关键函数7:

socket_write($socket参数1,$msg参数2,$strlen参数3)

作用:把数据写入套接字中

返回值:成功返回字符串的字节长度,失败为false

参数1:socket_create或者socket_accept的函数返回值

参数2:字符串

参数3:字符串的长度

关键函数8:

socket_close($socket)

作用:关闭套接字

返回值:成功返回true,失败为false

参数:socket_create或者socket_accept的函数返回值

这八个函数是socket的核心函数,下面列举两个个比较重要的函数

socket_last_error($socket),参数为socket_create的返回值,作用是获取套接字的最后一条错误码号,返回值套接字code

socket_strerror($code),参数为socket_last_error函数的返回值,获取code的字符串信息,返回值也就是套接字的错误信息

这两个函数在socket编程中还是很重要的,在写socket编程的时候,我觉得你还是得利用起来,特别是新手,可以当做调试用

下面就是代码了,注意注意,请认真看我的注释,注释很重要,

服务端脚本,D:\vhost\test\socket\server_socket.php 

小提示:请注意上面的socket_bind,socket_listen,socket_accept三个函数的执行顺序不可更改,也就是说

必须先执行socket_bind,再执行socket_listen,最后才执行socket_accept

客户端脚本,D:\vhost\test\socket\client_socket.php

 1, "usec" => 0)); //发送套接流的最大超时时间为6秒    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, array("sec" => 6, "usec" => 0));/****************设置socket连接选项,这两个步骤你可以省略*************///连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系    if(socket_connect($socket,'127.0.0.1',8888) == false){echo 'connect fail massege:'.socket_strerror(socket_last_error());}else{$message = 'l love you 我爱你 socket';//转为GBK编码,处理乱码问题,这要看你的编码情况而定,每个人的编码都不同        $message = mb_convert_encoding($message,'GBK','UTF-8');//向服务端写入字符串信息if(socket_write($socket,$message,strlen($message)) == false){echo 'fail to write'.socket_strerror(socket_last_error());}else{echo 'client write success'.PHP_EOL;//读取服务端返回来的套接流信息            while($callback = socket_read($socket,1024)){echo 'server return message is:'.PHP_EOL.$callback;}}}socket_close($socket);//工作完毕,关闭套接流

怎么测试这两个脚本呢?

首先打开windows的dos窗口,就是cmd黑窗口,然后,运行php D:\vhost\test\socket\server_socket.php,

让服务端的的黑窗口持续运行的,

其次,php的客户端脚本可以通过浏览器运行,也可以再开一个cmd黑窗口运行

php D:\vhost\test\socket\client_socket.php

在这里请注意:php这个运行命名必须加入windows的环境变量中,假如不知道怎么加,

请进入php运行命令目录用绝对命令运行,也可以百度把php命令加入环境变量中

你的文件地址可能和我不一样,请按照你的地址情况来操作,否则,后果自负

上面已经说过了,socket编程必须要有服务端才能交流,所以服务端的黑窗口是必须让它持续开着的。

到此,相信大家对"php的socket用法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

参数 函数 套接字 服务 作用 信息 客户 客户端 关键 就是 字符 字符串 运行 网络 编程 端的 资源 三个 两个 地址 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 万里数据库致远互联 中学生网络安全英语作文 如何设置服务器发布网页 个人邮件处理系统数据库设计 新网络安全的第一个时代 网络网络技术有限公司 武汉酷韵软件开发有限公司怎么样 梦幻西游端游转服务器多少钱 小学生关于网络安全的名言 浙江移动城管软件开发公司 加载数据库实例 网络安全解决方案的质量 在哪能进入tcga数据库 网络技术三级有什么好处 德国服务器机房哪个牌子好 静安区媒体数据库服务有哪些 河北专业软件开发成本 建站 服务器 福建纺织外贸软件开发 微信小程序要服务器空间运行吗 夺冠互联网科技 服务器主板功率 学校网络安全自查情况 怎么在vac安全服务器 交通安全食品安全网络安全 网络安全事件 级别 南阳网络安全资质申请哪家好 索引数据库英语 计算机三级网络技术原题 运用内存数据库进行数据分析实例
0