socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。

 
服务端的流程如下:
1、初始化信息并创建套接字(socket_create)
2、绑定IP地址和端口(socket_bind)
3、对端口进行监听(socket_listen)
4、调用accept阻塞,等待有客户端连接(socket_accept)
5、读取请求数据,并处理。(socket_read)
6、发送处理后的数据(socket_write)
7、关闭连接(socket_close)
客户端的流程如下:
1、初始化信息并创建套接字(socket_create)
2、连接服务端(socket_connect)
3、给服务端发送数据(socket_write)
4、获取服务端返回的数据(socket_read)
5、关闭连接(socket_close)
 
服务端代码server.php如下:
<?php
//设置脚本执行时间,0表示没有限制
set_time_limit(0); $ip = '127.0.0.1';
$port = 6666; //创建一个TCP的套接字
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) {
//如果创建失败,获取错误信息
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_create: {$errMsg}");
} //绑定套接字
if(socket_bind($socket, $ip, $port) === false) {
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_bind: {$errMsg}");
} //监听
if(socket_listen($socket, 5) === false) {
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_listen: {$errMsg}");
} //循环处理客户端连接
do {
if(($clientSocket = socket_accept($socket)) === false) {
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_accept: {$errMsg}");
} else { //给客户端发送信息
$msg = 'connect success';
socket_write($clientSocket, $msg, strlen($msg)); //读取客户端发来的信息
$clientMsg = socket_read($clientSocket, 8192);
echo "client msg: {$clientMsg}";
}
socket_close($clientSocket);
} while (true); socket_close($socket);
客户端代码client.php如下:
<?php
//设置脚本执行时间,0表示没有限制
set_time_limit(0); $ip = '127.0.0.1';
$port = 6666; //创建一个TCP的套接字
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false ) {
//如果创建失败,获取错误信息
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_create: {$errMsg}");
} //套接字连接
if(socket_connect($socket, $ip, $port) === false) {
$errMsg = socket_strerror(socket_last_error($socket));
die("socket_connect: {$errMsg}");
} //发送信息给服务端
$msg = "client post msg\r\n";
if(socket_write($socket, $msg, strlen($msg))) {
echo "client post msg success\r\n";
} //循环接收服务端发来的信息
while($serverMsg = socket_read($socket, 8192)) {
echo "server msg: {$serverMsg} \r\n";
} //关闭套接字
socket_close($socket);

(*注意代码需运行在cli下,进入到server.php代码目录)

> php server.php

我们通过如下命令查看,套接字是否创建成功。

> netstat -ano
可以看到6666端口已处在监听状态
 
然后我们运行client.php程序
> php client.php

可以看到服务端接收到了客户端发送的数据

客户端也收到了服务端发送的数据

 
 

php socket 编程(一)的更多相关文章

  1. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  2. java socket编程(li)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...

  3. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  4. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  5. Linux下的C Socket编程 -- 获取对方IP地址

    Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...

  6. Linux下的C Socket编程 -- 简介与client端的处理

    Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...

  7. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  8. Socket编程实践(2) Socket API 与 简单例程

    在本篇文章中,先介绍一下Socket编程的一些API,然后利用这些API实现一个客户端-服务器模型的一个简单通信例程.该例子中,服务器接收到客户端的信息后,将信息重新发送给客户端. socket()函 ...

  9. Socket编程实践(1) 基本概念

    1. 什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.TCP/IP协议的底层部分已经被内核实现了,而应用层是用户需要实现的,这部分程序工作在用户空间.用户空间的程序需要通 ...

  10. [转]C语言SOCKET编程指南

    1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

随机推荐

  1. SonarQube

    代码质量管理 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等)不 ...

  2. .Net2.0部署在IIS8.5上的问题

     请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理. 到"应用程序池"里找网站对应的应用程序池(右击网站-> 高级设置),双击程序池, 看程序池是否也网站的net ...

  3. 长沙雅礼中学集训-------------------day1(内含day0)

    day0: 首先,请允许我吐槽一下: 1.那些一个人住一个标准房的人您们真的是#@**¥&%……#*()%……*()@Q$&. 2.感谢那些一个人住一个标准间的人,要不然我们也找不到这 ...

  4. web.py模版系统

    介绍: 调用的web.py模版语言Templetor旨在将python的强大功能带入模版.它不是为模板创建新语法,而是重用python语法. Templetor故意限制模版中的变量访问.用户可以访问传 ...

  5. 生产者消费者模型(Queue,JoinableQueue)

    生产者消费者模型 主要是为解耦 借助队列来实现生产者消费者模型 栈:先进后出(First In Last Out 简称 FILO) 队列: 先进先出(First In First Out 简称 FIF ...

  6. selenium+python自动化89-用例不通过的时候发送邮件

    前言 实现需求:当测试用例全部通过的时候,不发邮件,当用例出现Error或Failure的时候发送邮件 解决思路:生成html测试报告后,用bs4解析html页面,写个函数判断页面上是都有不通过的记录 ...

  7. 2018-2019-2 《网络对抗技术》Exp2 后门原理与实践 Week4 20165233

    Exp2 后门原理与实践 实验内容 一.基础问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:通过访问钓鱼网站,无意下载了一些图片或是文件.而这个图片或文件中携带后门. 2.例举你知 ...

  8. 理解无偏估计(unbiased estimation)

    判断一个估计量“好坏”,至少可以从以下三个方面来考虑: 无偏估计 有效性 一致性 参考内容: 如何理解无偏估计量?https://www.matongxue.com/madocs/808.html 衡 ...

  9. Latex Error:‘acmart.cls’ not found 解决方案:

    windows下latex编译ACM论文模板时,出现Latex Error:‘acmart.cls’ not found,解决方案:  首先cd至模板所在目录下,然后运行以下命令:  tex acma ...

  10. VCSA 6.5 升级 VCSA 6.7

    VCSA 6.7已于4月17日正式发布,文件名为VMware-VCSA-all-6.7.0-8217866.iso,国内百度网盘已有下载链接,请自行搜索. 下载后解压,运行\VMware-VCSA-a ...