
正文
php数据结构 php数据结构查找两个地点之间最短的路径
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PHP编程语言中的socket是什么东西
HP使用Berkleyphp数据结构的socket库来创建它的连接。php数据结构你可以知道socket只不过是一个数据结构。php数据结构你使用这个socket数据结构去开始一个客户端和服务器之间的会话。这个服务器是一直在监听准备产生一个新的会话。当一个客户端连接服务器php数据结构,它就打开服务器正在进行监听的一个端口进行会话。这时,服务器端接受客户端的连接请求,那么就进行一次循环。现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端。产生一个Socket,你需要三个变量:一个协议、一个socket类型和一个公共协议类型。产生一个socket有三种协议供选择,继续看下面的内容来获取详细的协议内容。定义一个公共的协议类型是进行连接一个必不可少的元素。下面的表我们看看有那些公共的协议类型。表一:协议名字/常量描述AF_INET这是大多数用来产生socket的协议,使用TCP或UDP来传输,用在IPv4的地址AF_INET6与上面类似,不过是来用在IPv6的地址AF_UNIX本地协议,使用在Unix和Linux系统上,它很少使用,一般都是当客户端和服务器在同一台及其上的时候使用表二:Socket类型名字/常量描述SOCK_STREAM这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。SOCK_DGRAM这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。SOCK_SEQPACKET这个协议是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。SOCK_RAW这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议)SOCK_RDM这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包的顺序表三:公共协议名字/常量描述ICMP互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信息UDP用户数据报文协议,它是一个无连接,不可靠的传输协议TCP传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。现在你知道了产生一个socket的三个元素,那么我们就在php中使用socket_create()函数来产生一个socket。这个socket_create()函数需要三个参数:一个协议、一个socket类型、一个公共协议。socket_create()函数运行成功返回一个包含socket的资源类型,如果没有成功则返回false。Resourecesocket_create(intprotocol,intsocketType,intcommonProtocol);现在你产生一个socket,然后呢?php提供了几个操纵socket的函数。你能够绑定socket到一个IP,监听一个socket的通信,接受一个socketphp数据结构;现在我们来看一个例子,了解函数是如何产生、接受和监听一个socket。上面这个例子产生一个你自己的服务器端。例子第一行,$commonProtocol=getprotobyname(“tcp”);使用公共协议名字来获取一个协议类型。在这里使用的是TCP公共协议,如果你想使用UDP或者ICMP协议,那么你应该把getprotobyname()函数的参数改为“udp”或“icmp”。还有一个可选的法是不使用getprotobyname()函数而是指定SOL_TCP或SOL_UDP在socket_create()函数中。$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);例子的第二行是产生一个socket并且返回一个socket资源的实例。在你有了一个socket资源的实例以后,你就必须把socket绑定到一个IP地址和某一个端口上。socket_bind($socket,‘localhost’,1337);在这里你绑定socket到本地计算机(127.0.0.1)和绑定socket到你的1337端口。然后你就需要监听所有进来的socket连接。socket_listen($socket);在第四行以后,你就需要了解所有的socket函数和他们的使用。表四:Socket函数函数名描述socket_accept()接受一个Socket连接socket_bind()把socket绑定在一个IP地址和端口上socket_clear_error()清除socket的错误或者最后的错误代码socket_close()关闭一个socket资源socket_connect()开始一个socket连接socket_create_listen()在指定端口打开一个socket监听socket_create_pair()产生一对没有区别的socket到一个数组里socket_create()产生一个socket,相当于产生一个socket的数据结构socket_get_option()获取socket选项socket_getpeername()获取远程类似主机的ip地址socket_getsockname()获取本地socket的ip地址socket_iovec_add()添加一个新的向量到一个分散/聚合的数组socket_iovec_alloc()这个函数创建一个能够发送接收读写的iovec数据结构socket_iovec_delete()删除一个已经分配的iovecsocket_iovec_fetch()返回指定的iovec资源的数据socket_iovec_free()释放一个iovec资源socket_iovec_set()设置iovec的数据新值socket_last_error()获取当前socket的最后错误代码socket_listen()监听由指定socket的所有连接socket_read()读取指定长度的数据socket_readv()读取从分散/聚合数组过来的数据socket_recv()从socket里结束数据到缓存socket_recvfrom()接受数据从指定的socket,如果没有指定则默认当前socketsocket_recvmsg()从iovec里接受消息socket_select()多路选择socket_send()这个函数发送数据到已连接的socketsocket_sendmsg()发送消息到socketsocket_sendto()发送消息到指定地址的socketsocket_set_block()在socket里设置为块模式socket_set_nonblock()socket里设置为非块模式socket_set_option()设置socket选项socket_shutdown()这个函数允许你关闭读、写、或者指定的socketsocket_strerror()返回指定错误号的详细错误socket_write()写数据到socket缓存socket_writev()写数据到分散/聚合数组(注:函数介绍删减了部分原文内容,函数详细使用建议参考英文原文,或者参考PHP手册)以上所有的函数都是PHP中关于socket的,使用这些函数,你必须把你的socket打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释:extension=php_sockets.dll如果你无法去掉注释,那么请使用下面的代码来加载扩展库:如果你不知道你的socket是否打开,那么你可以使用phpinfo()函数来确定socket是否打开。你通过查看phpinfo信息了解socket是否打开。如下图:查看phpinfo()关于socket的信息◆ 产生一个服务器现在我们把第一个例子进行完善。你需要监听一个指定的socket并且处理用户的连接。你应该使用你的命令提示符来运行这个例子。理由是因为这里将产生一个服务器,而不是一个Web页面。如果你尝试使用Web浏览器来运行这个脚本,那么很有可能它会超过30秒的限时。你可以使用下面的代码来设置一个无限的运行时间,但是还是建议使用命令提示符来运行。set_time_limit(0);在你的命令提示符中对这个脚本进行简单测试:Php.exeexample01_server.php如果你没有在系统的环境变量中设置php解释器的路径,那么你将需要给php.exe指定详细的路径。当你运行这个服务器端的时候,你能够通过远程登陆(telnet)的方式连接到端口1337来测试这个服务器。如下图:上面的服务器端有三个问题:1.它不能接受多个连接。2.它只完成唯一的一个命令。3.你不能通过Web浏览器连接这个服务器。这个第一个问题比较容易解决,你可以使用一个应用程序去每次都连接到服务器。但是后面的问题是你需要使用一个Web页面去连接这个服务器,这个比较困难。你可以让你的服务器接受连接,然后些数据到客户端(如果它一定要写的话),关闭连接并且等待下一个连接。在上一个代码的基础上再改进,产生下面的代码来做你的新服务器端:这个服务器端要做什么呢?它初始化一个socket并且打开一个缓存收发数据。它等待连接,一旦产生一个连接,它将打印“Socketconnected”在服务器端的屏幕上。这个服务器检查缓冲区,如果缓冲区里有数据,它将把数据发送到连接过来的计算机。然后它发送这个数据的接受信息,一旦它接受了信息,就把信息保存到数据里,并且让连接的计算机知道这些信息,最后关闭连接。当连接关闭后,服务器又开始处理下一次连接。(翻译的烂,附上原文)Thisiswhattheserverdoes.Itinitializesthesocketandthebufferthatyouusetoreceiveandsenddata.Thenitwaitsforaconnection.Onceaconnectioniscreateditprints“Socketconnected”tothescreentheserverisrunningon.Theserverthencheckstoseeifthereisanythinginthebuffer;ifthereis,itsendsthedatatotheconnectedcomputer.Afteritsendsthedataitwaitstoreceiveinformation.Onceitreceivesinformationitstoresitinthedata,letstheconnectedcomputerknowthatithasreceivedtheinformation,andthenclosestheconnection.Aftertheconnectionisclosed,theserverstartsthewholeprocessagain.◆ 产生一个客户端处理第二个问题是很容易的。你需要产生一个php页连接一个socket,发送一些数据进它的缓存并处理它。然后你又个处理后的数据在还顿,你能够发送你的数据到服务器。在另外一台客户端连接,它将处理那些数据。Tosolvethesecondproblemisveryeasy.YouneedtocreateaPHPpagethatconnectstoasocket,receiveanydatathatisinthebuffer,andprocessit.Afteryouhaveprocessedthedatainthebufferyoucansendyourdatatotheserver.Whenanotherclientconnects,itwillprocessthedatayousentandtheclientwillsendmoredatabacktotheserver.下面的例子示范了使用socket:这个例子的代码演示了客户端连接到服务器。客户端读取数据。如果这是第一时间到达这个循环的首次连接,这个服务器将发送“NODATA”返回给客户端。如果情况发生了,这个客户端在连接之上。客户端发送它的数据到服务器,数据发送给服务器,客户端等待响应。一旦接受到响应,那么它将把响应写到屏幕上。
相关问答
Q1: PHP,Java,Python,C,C++ 这几种编程语言都各有什么特点或优点
以下是其中提及的各种语言的优点php数据结构,文章中还列举了缺点分析。
(1)PHP的优点:
1. 跨平台php数据结构,性能优越php数据结构,跟Linux/Unix结合别跟Windows结合性能强45%,开发成本低,
PHP最经典的组合就是:Linux + Apache + MySQL + PHP。非常适合开发中小型的web应用,因为上手容易,所以开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换 PostgreSQL或者Oracle,支持N种数据库。(N = 10)
2. 语法简单,入门快,如果有其它语言基础的程序员二周左右的时间基本可以入门,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。
3. 目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。
4. 有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。
5. 有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.NET的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。
6. PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。
7. 有成熟的社区来支持PHP的开发。
8. 目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。(据了解现在内部都在逐渐转向JAVA)
9. 有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客 WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
PHP是解释性的脚本语言,写完代码以后即可以执行,不像c,java,c++等语言还需要去编译执行,相对来说比较节省时间。
10.相对来说,PHP程序员的薪水的平均工资要比c,c++,java程序员的平均工资要低一些,特别是对于中小型企业来说可以节约一些成本。
11.配置及部署相对简单一些,对比JAVA开发来说,JAVA开发的配置就复杂多了,什么Structs、Spring、Hibernate、Tomcat等等很多地方都需要配置,甚至你在程序中每写一个SQL语句都需要先在Hibernate中配置一下,有时重新部署一个class文件或jar文件还可能需要重启Web服务器(Tomcat或Resin或其它的Web服务器)使新部署的库文件生效。PHP开发中主要是PHP自身的配置文件及Web服务器的配置(如Apache或Nginx或Lighttpd等),相对于JAVA来说还是简单一些,而且新修改了文件以后不需要重新启动Web即可以立即生效。
12.有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
(2)JAVA的优点:
1.简单性
2.面向对象性(面向对象的程度可以达到95%)
3.健壮性
4.跨平台性
5.高性能(自动垃圾回收机制)
6.多线程
7.动态性
8.安全性
(3)Python的优点:
1.简单————Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。
2.易学————就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
3.免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
4.高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
5.可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台!
6.解释性————这一点需要一些解释。一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
7.面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
8.可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
9.可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
10.丰富的库————Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
概括————Python确实是一种十分精彩又强大的语言。它合理地结合了高性能与使得编写程序简单有趣的特色。
规范的代码————Python采用强制缩进的方式使得代码具有极佳的可读性。
(4)C语言的优点:
1.简洁紧凑、灵活方便
2.运算符丰富
3.数据结构丰富
4. C是结构式语言
5. C语法限制不太严格,程序设计自由度大
6. C语言允许直接访问物理地址,可以直接对硬件进行操作
7. C语言程序生成代码质量高,程序执行效率高
8. C语言适用范围大,可移植性好
9. C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型
10.有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护
(5)C++的优点:
1.可扩展性强
2.高效 简洁 快速
3.可移植性
4.面向对象的特性
5.强大而灵活的表达能力和不输于C的效率
6.支持硬件开发
7.程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障
8.通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便
Q2: java、net、php学哪个好
如果就在这三个里面选,你又学过c,那还是java吧,一是因为java与c比较接近,而且是比较纯粹的面向对象,不像.net有那么多乱七八糟的特性,作为入门打基础比较好,而php比较老了;另一个从应用范围来说,java并不是只适合大项目,其实语言与项目大小没有直接关系,不用太考虑这个,而现在流行的智能手机软件,android用的就是java,windows phone用的是.net,其中暂时看来android前景较好。另外,如果想做一个好的程序员,语言不是最重要的,更重要的是算法数据结构,以及英语,等等。祝你好运。
Q3: php连接数据库安全吗源码
安全。php连接数据库有三层密码层层防护php数据结构,源码很安全。数据库是“按照数据结构来组织、存储和管理数据php数据结构的仓库”php数据结构,是一个长期存储在计算机内的集合。
Q4: PHP变量的zval是什么意思
zval是php变量比如$a在php源码c语言zend引擎中的struct数据结构..
每个php变量对应一个在zval结构.
需要观测php中变量运行的时候才考虑zval...
Q5: php 怎么使用 flatbuffer
在Android应用程序中使用Flatbuffers的最简单方法:
JSON数据在应用程序之外的某个地方被转换成FlatBuffer格式的文件(例如,将二进制数据以文件的形式提交,还可以从API直接返回FlatBuffer二进制文件)。
在flatc (FlatBuffer编译器)的帮助下,手工生成数据模型(Java类)。
JSON文件存在一定的局限性(不能使用null字段,日期格式也被解析为字符串)。
将来,我们或许会提出更复杂的解决方案。
FlatBuffers编译器
首先,我们需要flatc,即flatbuffers编译器。该编译器可以从Google所属的源代码构建,源代码位于Flatbuffers资源库中。我们下载并克隆它。整个构建过程在FlatBuffers构建文档中都做了描述。如果你是Mac用户的话,需要这样来构建:
在\{extract directory}\build\XcodeFlatBuffers.xcodeproj路径下,打开已下载的源代码。
点击Play按钮或⌘ + R,运行flatc scheme(默认情况下应该是被选中的)。
flatc可执行文件就会在项目的根目录下出现。
现在,我们可以使用schema编译器了,该编译器能够把给定的schema(在Java、C#、Python、GO和C++语言中的schema)生成为模型类,还可以把JSON转换成Flatbuffer的二进制文件。
Schema文件
接着,我们必须准备schema文件,该文件定义了要进行序列化和反序列化的数据结构。这个schema将用于flatc创建Java模型,把JSON转换成FlatBuffers的二进制文件。
php数据结构的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php数据结构查找两个地点之间最短的路径、php数据结构的信息别忘了在本站进行查找喔。








