http://blog.51yip.com/php/673.html
一,socket是什么
什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白 了就是一种通信机制。它类似于银行,电信啊这些部分的电话客服部门。你打电话的时候,那边会分配置一个人回答你的问题,客服部门就相当于socket的服 务器端了,你这边呢就相当于客户端了,在和你通话结束前,如果有人在想找和你通话的那个说话,是不可能的,因为你在和他通信,当然客服部门的电话交换机也 不会重复分配。
下面我将举例子来说明一下,socket是怎么工作的。如果你是基于应用层开发的人员并不一定要理解原理,但是能知道那是更好了。网上有关于socket的php api。下下来用就行了。
二,socket服务器server.php
- <?php
- // 建立server端socket
- $tcp = getprotobyname ( "tcp" );
- $socket = socket_create(AF_INET, SOCK_STREAM, $tcp );
- socket_bind($socket , '127.0.0.1' , 10008); //绑定要监听的端口
- socket_listen($socket ); //监听端口
- //初始化一个数据,和客户端通信
- $buffer = "connect" ;
- while (true) {
- // 接受一个socket连接
- $connection = socket_accept( $socket );
- if (! $connection ){
- echo "connect fail" ;
- }else {
- echo "Socket connected\n" ;
- // 向客户端传递一个信息数据
- if ( $buffer != "" ) {
- echo "send data to client\n" ;
- socket_write($connection , $buffer . "\n" );
- echo "Wrote to socket\n" ;
- } else {
- echo "no data in the buffer\n" ;
- }
- // 从客户端取得信息
- while ( $data = @socket_read( $connection , 1024, PHP_NORMAL_READ)) {
- printf("Buffer: " . $data . "\n" );
- //取得信息给客户端一个反馈
- socket_write($connection , "Information Received\n" );
- }
- }
- socket_close($connection );
- //关闭 socket
- printf("Closed the socket\n" );
- }
- ?>
三,socket客户端client.php
- <?php
- // 建立客户端的socet连接
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- $connection = socket_connect( $socket , '127.0.0.1' , 10008); //连接服务器端socket
- while ( $buffer = @socket_read( $socket , 1024, PHP_NORMAL_READ)) {
- //服务端告诉客户端,自己的状态
- if (preg_match( "/not connect/" , $buffer )) {
- echo "don`t connect\n" ;
- break ;
- } else {
- //服务器传来信息
- echo "Buffer Data: " . $buffer . "\n" ;
- echo "Writing to Socket\n" ;
- // 将客户的信息写到通道中,传给服务器端
- if (!socket_write( $socket , "SOME DATA\n" )) {
- echo "Write failed\n" ;
- }
- //服务器端收到信息后,给于的回应信息
- while ( $buffer = socket_read( $socket , 1024, PHP_NORMAL_READ)) {
- echo "sent to server: SOME DATA\n response from server was:" . $buffer . "\n" ;
- }
- }
- }
- ?>
四,通信机制的一个图片(不考虑等待时间结束自动关闭socket)
简单说明一下,在说明前我要说一下,为什么要用php命令来执行服务器和客户端,客户端你用fsockopen,这样就在流览器上访问了,不至少于会连接超时。为什么会这样呢,因为你创建一个socket时,它会不断的去监听客户有没有要来连接。
socket通信的建立要二个socket通道,一个是服务器端创建的,一个是客户端创建的。
1号线,服务器创建一个socket通道,并将信息放到缓存,等待客户端连接
2号线,客户端创建一个socket通道,并连接服务器端,取得服务器端的信息进行通信,将要传的信息送入通道
3号线,服务器端从客户端取得信息,并告诉客户端,信息我已经收到了。将要传的信息送入通道
4号线,客户端从服务器端取得确认信息
到此一个通信就完全建立了,数据传输完毕后,服务器端会断开socket通信,具体操作如下
1,运行socket服务器端
[root@BlackGhost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php
Interactive mode enabled
这一点做了那些工作呢
a,监听了一个10008端口
[zhangy@BlackGhost ~]$ netstat -an |grep LISTEN |grep 10008
tcp 0 0 127.0.0.1:10008 0.0.0.0:* LISTEN
[zhangy@BlackGhost ~]$
b,将信息送到缓存里面
$buffer = "connect";看上面的代码 2,运行socket客户端 [root@BlackGhost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/client.php Interactive mode enabled Buffer Data: connect Writing to Socket sent to server: SOME DATA response from server was:Information Received 3,回到服务器端 [root@BlackGhost zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php Interactive mode enabled Socket connected send data to client Wrote to socket Buffer: SOME DATA Closed the socket 关于上图纯属个人理解,如有不对,请大侠们指教。
发表评论
-
php 利用socket上传文件
2012-12-28 10:40 1209http://blog.51yip.com/php/686.h ... -
Linux下Xdebug的编译安装及使用方法
2012-12-18 17:27 1619http://zhugebin.sinaapp.com/lin ... -
CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2
2012-11-11 23:37 1029说明: 操作系统:CentOS 6.2 32 ... -
CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5
2012-11-04 19:56 895说明: 操作系统:CentOS 6.3 32位 系 ... -
Nginx配置详解
2012-09-20 09:38 1002#运行用户 user www www; ... -
entOS 5.4下的Memcache安装(Linux+Nginx+PHP+Memcached)
2012-09-20 09:27 913一、源码包准备 服务器端主要是安装memcache服务器端, ... -
linux下pecl_http的安装
2012-09-12 16:22 935因为需要做RESTfull的开发,需要使用到pecl_http ... -
20个Nginx Web服务器最佳安全实践
2012-09-11 15:42 1952<p>www.myhack58.com/Artic ... -
CentOS Nginx PHP MySQL Memcached 安装 配置 优化 (二)
2012-09-11 12:12 1492接上篇 CentOS Nginx PHP MySQL Mem ... -
CentOS Nginx PHP MySQL Memcached 安装 配置 优化
2012-09-11 12:11 1348http://www.phpplay.com/thread-1 ... -
在CentOS上MySQL数据库服务器配置方法
2012-09-04 15:06 886http://www.jb51.net/article/232 ... -
win7配置安装php 5.3.5 + mysql 5.1.51 + apache 2.2.17
2012-09-03 08:06 849我用的php版本是最新的,php5.3.5,你可以从这里下载 ...
相关推荐
### PHP的Socket通信 #### Socket概念 Socket,通常被称为“套接字”,是计算机网络通信中的一个重要组成部分。它主要用于描述IP地址和端口号,作为网络通信链路上的一个句柄。简单来说,应用程序通过套接字向网络...
PHP中的Socket通信机制是网络编程的重要组成部分,它允许PHP脚本在不同网络地址间进行通信。以下知识点详细介绍PHP中Socket通信机制的原理和使用方法。 一、Socket的定义与工作原理 Socket是应用层与TCP/IP协议族...
- **通信模型**:通常情况下,Socket通信采用客户端/服务器模型。客户端负责发起连接请求,而服务器端则监听连接请求,并处理来自客户端的数据。 ##### 2. Socket地址家族(Address Families) - **AF_INET**:...
Socket接口是一种低级别的网络通信机制,允许程序直接与其他系统或进程进行数据交换,不受特定协议限制。在PHP中,我们可以使用内建的socket扩展来创建、连接和操作Socket。 首先,我们来看PHP客户端代码: ```php...
【PHP实例开发源码—ESFramework之P2P通信Demo php版.zip】是一个关于使用PHP进行P2P(Peer-to-Peer)通信的实例代码集合。P2P通信是一种网络通信模式,其中每个节点既是客户端也是服务器,允许直接在参与者之间交换...
- PHP原本主要用于HTTP协议,但在Workerman的帮助下,开发者可以通过Socket API扩展其功能,进行低级别网络通信。 - Socket是网络通信的基础,它提供了应用程序与网络协议之间的接口,允许两台计算机通过网络进行...
通过Socket,PHP可以进行更底层的网络通信操作,如创建服务器监听特定端口、接收客户端连接请求、发送和接收数据等。 #### 2. HTTP协议与Web服务 HTTP是Web应用中最常用的协议,PHP作为Web开发语言,对HTTP的支持尤...
本篇文章主要介绍了php的socket通信原理,讲述了socket通信机制的原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1. **PHP Socket编程**:PHP可以通过Socket接口与服务器进行通信,创建服务器端套接字,监听客户端连接,接收并处理客户端发送的数据,再将响应数据回传给客户端。开发者需要理解socket的创建、绑定、监听、接受连接...
安装完成后,我们可以创建一个socket实例,并连接到PHPWorkerman服务器上的socket.io端点。连接成功后,客户端可以订阅特定的事件,发送和接收消息。 在PHPWorkerman中,我们需配置socket.io服务器,监听特定端口,...
标题中的“TP使用socket对接联通SGIP”...此外,对ThinkPHP框架的理解也至关重要,因为框架的某些功能可能有助于简化socket通信过程,如使用框架的事件系统来处理异步操作,或者利用模型、控制器等组件来组织业务逻辑。
2. **设置服务器**:在服务器端,你需要创建一个Socket.IO实例,并监听特定的事件。例如,监听`connection`事件,当有新用户连接时触发。你还需要监听`message`事件,处理从客户端发送过来的消息,并广播到所有已...
PHP本身不支持多线程,但可以利用pthreads扩展或者通过socket通信实现异步处理。此外,还可以使用curl_multi_init函数来实现HTTP请求的并发。 4. **URL管理**:有效的URL管理是爬虫系统的关键。这通常涉及到URL去重...
Socket是PHP中用于网络通信的一种接口,它允许程序员创建低级别的TCP/IP套接字连接,进行数据传输。在这个“socket:发送邮件的php类库”中,开发者提供了一个方便的工具,使得通过PHP发送电子邮件变得更加简单。这...
【标题】"PHP实例开发源码—域名Whois查询工具php版.zip" 是一个基于PHP编程语言编写的Whois查询工具的源代码包。这个工具主要用于获取互联网上域名的注册信息,包括但不限于注册商、注册日期、到期日期、联系人信息...
3. **PHP端调用**:在PHP端,你可以通过HTTP请求或者直接使用socket通信来调用Java服务。PHPJava Bridge提供了PHP类库,简化了这个过程。 4. **数据类型转换**:PHP和Java的数据类型不完全相同,因此在交互过程中...
【PHP实例开发源码-心挂Q(PHP在线24小时挂Q).zip】是一个包含PHP编程语言实现的项目,主要用于创建一个在线挂Q系统。挂Q通常指的是保持QQ账号在线,以便于接收消息、处理自动任务或者保持某种状态,如在线状态显示。...
管道通信是一种简单的进程间通信机制,它允许不同进程(或线程)之间共享数据。在PHP中,我们通常使用POSIX标准的`posix_mkfifo()`函数创建一个命名管道(FIFO),这种管道本质上是一个特殊的文件,具有先进先出...
【PHP实例开发源码—php实现的跟QQ和MSN类似的BICQ.zip】是一个基于PHP语言的开源项目,旨在创建一个类似QQ和MSN的即时通讯系统。通过这个项目,我们可以深入学习PHP在构建网络通信应用方面的核心技术和设计模式。...