socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现socket通信。

由于socket服务端的代码要监听端口,等待接收请求,所以php在做socket服务的时候需要将php文件运行在CMD里面。

如果要使php文件可以在CMD里面运行,则需要进行如下设置:

1.添加环境变量,名字为PHP_HOME,值为php文件安装目录下的.exe文件地址,如D:\wamp\bin\php\php5.5.12\php.exe

2.修改系统变量path的值

在path的值里面添加php安装的目录:如D:\wamp\bin\php\php5.5.12;

好了,到这里我们就配置好了环境变量,下一步我们打开CMD,想要在里面运行php文件,比如aaa.php文件,则我们写上这一句话:

php d:\wamp\www\aaa.php

然后按下回车键,好了,我们的php文件在cmd里面运行了,输出了一句:hello

这样的话php文件能够成功在cmd里面运行,接下来我们来看一下php怎么实现socket通信。

1.php制作的socket服务端

主要功能是设置socket通信的IP地址及端口号,监听端口,有客户端连接的话,接收连接请求接收数据,处理并且返回数据。

代码如下:

//确保在连接客户端时不会超时

set_time_limit(0);

//设置IP和端口号

$address = "127.0.0.1";

$port = 2048; //调试的时候,可以多换端口来测试程序!

/**

 * 创建一个SOCKET 

 * AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6

 * SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM

*/

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");

//阻塞模式

socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");

//绑定到socket端口

$result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");

//开始监听

$result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");

echo "OK\nBinding the socket on $address:$port ... ";

echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";

do { // never stop the daemon

 //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息

 $msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");

 //读取客户端数据

 echo "Read client data \n";

 //socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.

 $buf = socket_read($msgsock, 8192);

 echo "Received msg: $buf \n";

 //数据传送 向客户端写入返回结果

 $msg = "welcome \n";

 socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");

 //一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止

 socket_close($msgsock);

} while (true);

socket_close($sock);

2.调取socket服务的客户端文件

客户端依然是要设置好要访问服务器的IP地址及端口号(即上一步骤中的IP及端口),完了创建一个socket连接,发送数据到服务器,接收返回数据。

set_time_limit(0);

$host = "127.0.0.1";

$port = 2048;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n"); // 创建一个Socket

$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");  // 连接

socket_write($socket, "hello socket") or die("Write failed\n"); // 数据传送 向服务器发送消息

while ($buff = @socket_read($socket, 1024, PHP_NORMAL_READ)) {

  echo("Response was:" . $buff . "\n");

}

socket_close($socket);

3.在cmd里面运行服务端代码

运行成功,已经在监听端口了。。。

4.在网页里面运行我们的客户端网页,来向服务器交互数据

运行起来,浏览器显示:

cmd里面的服务端显示:

这是一个简单的socket通信的测试,至于socket接收到什么数据,怎么处理数据,返回什么类型的数据,还需要使用php来做逻辑了。

php socket通信的简单实现的更多相关文章

  1. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  2. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  3. 16 Socket通信(简单例子)

      服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Da ...

  4. Socket通信的简单例子

    客户端代码: package com.bobohe.socket; import java.io.*; import java.net.*; public class TalkClient { pub ...

  5. 170411、java Socket通信的简单例子(UDP)

    服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; class UDPServer { public stat ...

  6. 170410、java Socket通信的简单例子(TCP)

    服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...

  7. Android笔记——Socket通信实现简单聊天室

    两部分,客户端和服务端 ---------------------------------------------------------------- 客户端  1.为防止ANR异常,互联网连接可用 ...

  8. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  9. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA)   好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些 ...

随机推荐

  1. python3 连接数据库~

    ~目前记录的是针对python3写的数据库连接,不适用于pyhon2.python3如果想要与数据库进行连接,则需要先下载对应各数据库的插件包,然后导入包.python3的插件下载地址:https:/ ...

  2. 开源后台系统*mee-admin*

    mee-admin开源后台系统 Preface 这是一个开放的时代,我们不能总是把东西揣在口袋里面自己乐呵. 也正如名言所说的"如果你有两块面包,你当用其中一块去换一朵水仙花" 所 ...

  3. P4454 [CQOI2018]破解D-H协议

    链接 这题并不难只是需要把题读懂 - By ShadderLeave 一句话题意 给定两个数 \(p\)和\(g\),有\(t\)组询问,每组询问给出\(A\)和\(B\) 其中 A = \(g^a ...

  4. 【比赛记录】8.21 div2

    A 选择一个点\(B(x,0)\)使得\(|dis(A,B)-x|=k.\) 题目实际上就是找到一个最接近\(n\)的数,使得它可以分成两个数\(a,b,\)使\(a-b=k.\) 我们考虑先分成一个 ...

  5. 深入研究RocketMQ消费者是如何获取消息的

    前言 小伙伴们,国庆都过的开心吗?国庆后的第一个工作日是不是很多小伙伴还沉浸在假期的心情中,没有工作状态呢? 那王子今天和大家聊一聊RocketMQ的消费者是如何获取消息的,通过学习知识来找回状态吧. ...

  6. Linux 杀毒软件ClamAV安装部署

    环境说明 系统安全需求,批量安装免费杀毒软件: 操作系统统一为CentOS 7 x64,在此选择免费开源杀毒软件ClamAV: 两种安装方式 1.yum 安装: 2.源码包编译安装: 安装参考网址: ...

  7. 从零开始学python之Python安装和环境配置

    Python 3适用于Windows,Mac OS和大多数Linux操作系统.即使Python 2目前可用于许多其他操作系统,有部分系统Python 3还没有提供支持或者支持了但被它们在系统上删除了, ...

  8. php中 ob_函数 例:ob_start();用法

    ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担 ob的基本原则:如果o ...

  9. 如何在yii2直接执行SQL

    执行SQL $connection=Yii::app()->db;   // 假设你已经建立了一个 "db" 连接 $sql = "SELECT * FROM tb ...

  10. 多测师_高级肖sir分享pycharm中设置主题和设置代码颜色方法

    一.修改pycharm中的主题颜色 二.修改代码颜色 File-->Settings-->Editor--> Color Scheme-->Language Defaults- ...