php 实例说明 socket通信机制

php 实例说明 socket通信机制

张映 发表于 2010-04-24

分类目录: php

一,socket是什么

什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。它类似于银行,电信啊这些部分的电话客服部门。你打电话的时候,那边会分配置一个人回答你的问题,客服部门就相当于socket的服务器端了,你这边呢就相当于客户端了,在和你通话结束前,如果有人在想找和你通话的那个说话,是不可能的,因为你在和他通信,当然客服部门的电话交换机也不会重复分配。

下面我将举例子来说明一下,socket是怎么工作的。如果你是基于应用层开发的人员并不一定要理解原理,但是能知道那是更好了。网上有关于socket的php api。下下来用就行了。

二,socket服务器server.php

 

查看复制打印?

  1. <?php
  2. // 建立server端socket
  3. $tcp = getprotobyname("tcp");
  4. $socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
  5. socket_bind($socket, ‘127.0.0.1‘, 10008);       //绑定要监听的端口
  6. socket_listen($socket);       //监听端口
  7. //初始化一个数据,和客户端通信
  8. $buffer = "connect";
  9. while (true) {
  10. // 接受一个socket连接
  11. $connection = socket_accept($socket);
  12. if(!$connection){
  13. echo "connect fail";
  14. }else{
  15. echo "Socket connected\n";
  16. // 向客户端传递一个信息数据
  17. if ($buffer != "") {
  18. echo "send data to client\n";
  19. socket_write($connection, $buffer . "\n");
  20. echo "Wrote to socket\n";
  21. } else {
  22. echo "no data in the buffer\n" ;
  23. }
  24. // 从客户端取得信息
  25. while ($data = @socket_read($connection, 1024, PHP_NORMAL_READ)) {
  26. printf("Buffer: " . $data . "\n");
  27. //取得信息给客户端一个反馈
  28. socket_write($connection, "Information Received\n");
  29. }
  30. }
  31. socket_close($connection);
  32. //关闭 socket
  33. printf("Closed the socket\n");
  34. }
  35. ?>

三,socket客户端client.php

查看复制打印?

  1. <?php
  2. // 建立客户端的socet连接
  3. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  4. $connection = socket_connect($socket, ‘127.0.0.1‘, 10008);    //连接服务器端socket
  5. while ($buffer = @socket_read($socket, 1024, PHP_NORMAL_READ)) {
  6. //服务端告诉客户端,自己的状态
  7. if (preg_match("/not connect/",$buffer)) {
  8. echo "don`t connect\n";
  9. break;
  10. } else {
  11. //服务器传来信息
  12. echo "Buffer Data: " . $buffer . "\n";
  13. echo "Writing to Socket\n";
  14. // 将客户的信息写到通道中,传给服务器端
  15. if (!socket_write($socket, "SOME DATA\n")) {
  16. echo "Write failed\n";
  17. }
  18. //服务器端收到信息后,给于的回应信息
  19. while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
  20. echo "sent to server: SOME DATA\n response from server was:" . $buffer . "\n";
  21. }
  22. }
  23. }
  24. ?>

四,通信机制的一个图片(不考虑等待时间结束自动关闭socket)

socket交互流程

简单说明一下,在说明前我要说一下,为什么要用php命令来执行服务器和客户端,客户端你用fsockopen,这样就在流览器上访问了,不至少于会连接超时。为什么会这样呢,因为你创建一个socket时,它会不断的去监听客户有没有要来连接。

socket通信的建立要二个socket通道,一个是服务器端创建的,一个是客户端创建的。

1号线,服务器创建一个socket通道,并将信息放到缓存,等待客户端连接

2号线,客户端创建一个socket通道,并连接服务器端,取得服务器端的信息进行通信,将要传的信息送入通道

3号线,服务器端从客户端取得信息,并告诉客户端,信息我已经收到了。将要传的信息送入通道

4号线,客户端从服务器端取得确认信息

到此一个通信就完全建立了,数据传输完毕后,服务器端会断开socket通信,具体操作如下

1,运行socket服务器端

[[email protected] zhangy]# /usr/local/php/bin/php -a /home/zhangy/www/test2/server.php
Interactive mode enabled

这一点做了那些工作呢

a,监听了一个10008端口

[[email protected] ~]$ netstat -an |grep LISTEN |grep 10008
tcp        0      0 127.0.0.1:10008         0.0.0.0:*               LISTEN
[[email protected] ~]$

b,将信息送到缓存里面

$buffer = "connect";看上面的代码

2,运行socket客户端
[[email protected] 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,回到服务器端
[[email protected] 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

关于上图纯属个人理解,如有不对,请大侠们指教。
时间: 2024-10-18 08:54:27

php 实例说明 socket通信机制的相关文章

php socket通信机制实例说明与代码

php socket通信机制实例说明与代码----什么是socket 所谓socket一般也称作"套接字",用于描述ip地址和端口,是一个通讯链的句柄.使用程序一般经过"套接字"向network发出请求也许应对network请求.说白了就是一种通讯机制.它类似于银行,电信啊这一些部分的电话客服业务单元.您打电话的时候,那边会调设置一个人回答您的问题,客服业务单元就相当于socket的服务器端了,您这边呢就相当于用户端了,在和您通话完结前,假设有人在想找和您通话的那个

socket 通信机制的实现

IOS socket 通信机制的实现 2014-11-24 23:12 44人阅读 评论(0) 收藏 举报 socket 套接字, 是基于TCP UDP  协议的  一种通信机制,   它本身就是对TCP 和UDp 协议应用的一种管理 iOS 中 socket 通信 1,我们使用第三方库AsyncSocket 准备工作 1,  把AsyncSocket  加入到我们的工程,   这个玩意 一般是手动的,  如果你使用的是自动的, 需要再变异的时候 添加 fno-objec-arc 2,  使用第

一起talk C栗子吧(第一百五十五回:C语言实例--获取socket通信地址)

各位看官们,大家好,上一回中咱们说的是socket通信地址系统调用的例子,这一回咱们说的例子是:获取socket通信地址 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们前面的章回中介绍了与套接字通信地址相关的系统调用.还是哪句话,光说不练,不是我们的风格,今天我就通过具体的代码来演示如何使用这些系统调用来获取套接字的通信地址. 下面是使用该函数的详细步骤及其代码.我通过代码+注释的方式展示给大家,以方便大家更加好地理解该函数的用法. char * host = "localh

Socket通信机制(学习总结)

一.什么是Socket: 1.Socket是两个程序进行双向数据传输的网络通信的端点,由一个地址和一个端口来标识. 2.两种通信方式:有连接方式TCP.无连接方式UDP(用户数据报协议). 二.有连接方式TCP 1.通信双方在开始时必须进行一次连接过程(三次握手),建立一条通信链路.通信链路提供了可靠的,全双工的字节流服务. Socket是两个进程间通信链的端点,每个socket有两个流:一个输入流和输出流:其中: (1)只要向Socket的输出流写,一个进程就可以通过网络连接向其他进程发送数据

java 大文件上传 断点续传 完整版实例 (Socket、IO流)

原文出自:https://blog.csdn.net/seesun2012 java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操作 2.服:使用ServerSocket.accept()方法进行阻塞,接收客户端请求 3.服:每接收到一个Socket就建立一个新的线程来处理它 4.客:利用Socket进行远程连接,询问已上传进度 5.客:使用File

Socket进程通信机制

1.Socket通常称为"套接字",用于描述IP地址和端口,是一个通信链的句柄. 2.应用程序通过套接字向网络发出请求或者应答网络请求. 3.Socket既不是一个程序,也不是一种协议,其只是操作系统提供的通信层的一组抽象API. 4.进程通信的相关概念: 网间进程通信要解决的是不同主机进程间相互通信问题.为此,首先要解决的是网间进程标识问题.同一主机上,不同进程可用唯一进程号(Process ID)标识. (1)端口:网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源,用于

python的socket通信实例

一.socket简介 1. 套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象. 它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要. 套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳. 许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供

Socket通信入门小实例

客户端: public class Client { private int port = 8000; private String host = "localhost"; private Socket socket; public Client() throws UnknownHostException, IOException { socket = new Socket(host, port); } public void readFromUser() throws IOExcep

java NIO socket 通信实例

java Nio 通信与Bio通信主要不同点: 1.Nio中的单个channel即可支持读操作也可以支持写操作,而bio中读操作要用inputstream,写操作要outputstream. 2.nio 采用byteBuffer 作为内存缓存区,向channel里写或者度操作,bio基本是用byte[] 3.nio采用 selector组件轮询读取就绪channel 服务端demo代码: package com.my.socket3; import java.io.ByteArrayOutput