千家信息网

php的socket建立套接的过程是怎样的

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要讲解了"php的socket建立套接的过程是怎样的",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"php的socket建立套接的过程是怎样的
千家信息网最后更新 2025年01月24日php的socket建立套接的过程是怎样的

这篇文章主要讲解了"php的socket建立套接的过程是怎样的",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"php的socket建立套接的过程是怎样的"吧!



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

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

    说到这里,我想问一句,你说这socket让人头疼不?它既不建立个服务端,也不建立个客户端给我们应用,非要让我们自己去应用socket的函数,创建一个属于我们自己的网络协议套接应用,这是不是很让你头疼呢?头疼也没办法,要是你需要自己的应用,你还是不得不跟socket打交道。呵呵,这只是题外话,不多说,下面进入正题。

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

socket的关键函数1:

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

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

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

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

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

上面一句话是从php在线手册那里复制过来的。看到没有,这里说得意思是不是和我上面反反复复提到的客户端与服务端一模一样?呵呵。

    参数1是:网络协议,

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

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

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

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

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

    SOCK_STREAMSOCK_DGRAMSOCK_SEQPACKETSOCK_RAWSOCK_RDM。

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

SOCK_STREAMTCP协议套接字。

SOCK_DGRAMUDP协议套接字。

    参数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

`

怎么测试这两个脚本呢?

    首先打开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编程必须要有服务端才能交流,所以服务端的黑窗口是必须让它持续开着的。

    后记补充:

socket_set_option($socket参数1,$level参数2,$optname参数3,$optval参数4)

这个函数的作用是给套接字设置数据流选项,还是一个很重要的函数。

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

参数2:SOL_SOCKET,好像只有这个选项

参数3与参数4是相关联的,

参数3可为:SO_REUSEADDR  SO_RCVTIMEO S0_SNDTIMEO

解释一下:

SO_REUSEADDR  是让套接字端口释放后立即就可以被再次使用

        参数3假如是这个,则参数4可以为true或者false

SO_RCVTIMEO  是套接字的接收资源的最大超时时间

SO_SNDTIMEO   是套接字的发送资源的最大超时时间

  参数3假如是这两个,则参数4是一个这样的数组array('sec'=>1,'usec'=>500000)

  数组里面都是设置超时的最大时间,不过,一个是秒为单位,一个是微秒单位,作用都一样

感谢各位的阅读,以上就是"php的socket建立套接的过程是怎样的"的内容了,经过本文的学习后,相信大家对php的socket建立套接的过程是怎样的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

参数 函数 套接字 作用 客户 服务 信息 客户端 关键 就是 应用 运行 字符 字符串 资源 重要 网络 编程 过程 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 成都独角兽互联网科技 湖南以琳互联网科技公司 微信停车软件开发 遂宁软件开发哪家好 小程序开发 重庆股票软件开发公司电话 辰阔网络技术有限公司 阿里地区网络安全现状 明宇软件开发有限公司 软件开发和使用所涉及的判断题 韶关无限软件开发销售厂 计算机网络技术专业能进铁路局 鸡西网络安全罪 做网络安全好吗 网络安全病毒防范毕业论文 数据库工程师和运维工程师 十三不准及日常网络安全测试题 魔塔服务器 美萍收费系统数据库文件夹名称 简述数据库的三级模式体系 计算机信息网络安全员培训 ug10.0加工数据库的制作 帝国cms 数据库访问 学网络技术要多少钱 现在吃鸡都玩哪个服务器 网络安全风险评估原则 软件开发人员外包服务哪家好 江苏互联网软件开发哪家好 15项黑科技互联网大会 简述数据库的三级模式体系 网络安全隐患如何排查
0