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. MMC & SD 发展历史

    一.概述 MMC 卡和 SD 卡都是基于 Nand Flash 技术的移动存储卡. MMC(MultiMediaCard) 卡于 1997 年由西门子和 Sandisk 推出,SD (Secure D ...

  2. Nginx+Gunicorn+Supervisor部署Flask应用

    Flask 内置了简单的 Web 环境,让我们在开发的时候只需要专注于应用实现,而真正要在生产环境运行时这个简单的 Web 环境就不够用了,还需要一系列操作才能让 Web 应用高效的运行起来.现在记录 ...

  3. linux应用-线程操作

    文章写得好,转载一下, https://blog.csdn.net/triorwy/article/details/80380977

  4. USB虚拟串口 使用基于stm32的RT-Thread

    参考我的RT Thread论坛文章 https://www.rt-thread.org/qa/thread-422644-1-1.html

  5. centos7中nfs共享的配置方法

    NFS是Network File System的缩写,即网络文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下. 一.nfs为什么需要RPC? 因为NFS支持的功能很多,不同 ...

  6. shell-字符串及整数操作符讲解与多实践

    1. 字符串测试操作符 字符串测试操作符的作用:比较两个字符串是否相同.字符串长度是否为零,字符串是否为null(注:bash区分零长度字符串和空字符串)等. "="比较两个字符串 ...

  7. LVS+keepalive

    LVS+keepalive 什么是keepalive Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲 ...

  8. [java进阶]关于多线程的知识点

    线程和进程的区别? 进程: 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程. 在java中当我们的main函数运行时就是 ...

  9. turtle库元素语法分析

    一.turtle原理理解: turtle库是Python中一个有趣的图形绘制函数库.原名(海龟),我们想象一只海龟,位于显示器上窗体的正中心,在画布上游走,它游走的轨迹就形成了绘制的图形. 对于小海龟 ...

  10. 分析如何直接绕过超时代VPY视频播放器的播放密码

    声明:仅技术交流和学习! 前言: 你有没试过在网上下载一套视频,因网盘限速整整开机下载好几晚,下完后打开发现加密了,又找不到卖家注册.心里是几万只草泥马飞奔啊. 于是不甘心和好奇下,偿试自己破解. 目 ...