我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这篇文章主要讲解了“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

`<?php``//创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);    ``if``(socket_bind(``$socket``,``'127.0.0.1'``,8888) == false){` `echo` `'server bind fail:'``.socket_strerror(socket_last_error());` ```}` `//监听套接流``if``(socket_listen(``$socket``,4)==false){` `echo` `'server listen fail:'``.socket_strerror(socket_last_error());``}``//让服务器无限获取客户端传过来的信息do{    ``$accept_resource` `= socket_accept(``$socket``);` ```if``(``$accept_resource` `!== false){` ```$string` `= socket_read(``$accept_resource``,1024);` ```echo` `'server receive is :'``.``$string``.PHP_EOL;``//PHP_EOL为php的换行预定义常量``if``(``$string` `!= false){` `$return_client` `=` `'server receive is : '``.``$string``.PHP_EOL;` ```socket_write(``$accept_resource``,``$return_client``,``strlen``(``$return_client``));` ```}``else``{` `echo` `'socket_read is fail'``;``}` ```socket_close(``$accept_resource``);``}``}``while``(true);``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编程必须要有服务端才能交流,所以服务端的黑窗口是必须让它持续开着的。

    后记补充:

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建立套接的过程是怎样的这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

Socket调用过程是怎样的

本篇内容介绍了“Socket调用过程是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Socket由来在学习一个新知识之前,要去想它为什
2023-06-19

Socket函数调用过程是怎样的

本篇内容介绍了“Socket函数调用过程是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:简介Socket可以作插口或者插槽,可以想
2023-06-04

ssl连接建立的过程是什么

SSL连接建立的过程如下:1. 客户端发送连接请求到服务器。2. 服务器将自己的公钥和证书发送给客户端。3. 客户端使用服务器发送的证书中的公钥来加密一个随机数,并将其发送给服务器。4. 服务器使用自己的私钥来解密客户端发送的随机数,并使用
2023-06-11

python中socket是怎么建立服务器的

本篇内容介绍了“python中socket是怎么建立服务器的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明1、创建socket对象。2、
2023-06-20

建立ssl的过程是什么

建立SSL(Secure Socket Layer)的过程如下:1. 客户端向服务器发送一个HTTPS请求。2. 服务器使用公钥加密算法生成一对公私钥,并将公钥发送给客户端。3. 客户端收到服务器的公钥后,使用该公钥对一个随机生成的对称密钥
2023-08-25

VB.NET创建过程是怎么样的

VB.NET创建过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET中的过程执行,对于初学者来说是一个非常重要的基础知识。我们需要在学习的过程中不断地积累实
2023-06-17

创建CLR存储过程是怎样的

今天给大家介绍一下创建CLR存储过程是怎样的。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。下面叙述了创建CLR存储过程,从理论到实践,笔者把代码做了清晰地解释
2023-06-17

VirtualBox安装建立CentOS虚拟系统配置其他文件的过程是怎样的

这篇文章将为大家详细讲解有关VirtualBox安装建立CentOS虚拟系统配置其他文件的过程是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。特别值得一提的是CentOS有很多值得学习
2023-06-16

postfix邮件的接收和投递过程是怎样的

本篇文章给大家分享的是有关postfix邮件的接收和投递过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。postfix是Wietse Venema在IBM的GPL协议
2023-06-16

Vscode搭建远程c开发环境的过程是怎样的

这期内容当中小编将会给大家带来有关Vscode搭建远程c开发环境的过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基础环境目标机:ubuntu20开发机:win10、mac 安装远程开发套件本机
2023-06-21

php实现ffmpeg处理视频的过程是怎样的

本篇文章给大家分享的是有关php实现ffmpeg处理视频的过程是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近有一个项目需要使用ffmpeg处理视频,这里我写了一个d
2023-06-22

java的运行过程是怎样的

这篇文章给大家介绍java的运行过程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java的运行流程一,我们所看不到的:1,如果java文件没有package,就默认给文件加上"无名"package;2,默认导
2023-06-03

spring cloud中common-service的项目构建过程的是怎样的

spring cloud中common-service的项目构建过程的是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先在构建spring cloud的common
2023-06-05

Linux网络中数据包的接收过程是怎样的

本篇文章为大家展示了Linux网络中数据包的接收过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的。如果英文没有问题,强
2023-06-16

golang语言中wasm 环境搭建的过程是怎样的

本篇文章为大家展示了golang语言中wasm 环境搭建的过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang 安装通过官方地址 下载。MacOS 也可通过 brew 快速安装:$
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录