使用PHP创建SOCKET服务

简介: 最近好奇,接触接触PHP的socket编程,发现还是很好玩儿的。下面贴出来demo源码跟大家分享 Server.php <?php/** * PHP Socket Server * *///确保客户端连接时不会超时error_reporting(0);

最近好奇,接触接触PHP的socket编程,发现还是很好玩儿的。下面贴出来demo源码跟大家分享


Server.php

<?php

/**
 *  PHP Socket Server
 * */
//确保客户端连接时不会超时
error_reporting(0);                                                                                                                          
set_time_limit(0);
//设置地址与端口
$address = '127.0.0.1'; //服务端ip
$port = 2046;
//创建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() failed : ".socket_strerror(socket_last_error()). "\n");
//阻塞模式
socket_set_block($sock) or die("socket_set_block() failed : ".socket_strerror(socket_last_error()) ."\n");

//绑定到socket端口
$result = socket_bind($sock, $address, $port) or die("socket_bind() failed : ". socket_strerror(socket_last_error()) . "\n");
//开始监听
$result = socket_listen($sock, 4) or die("socket_listen() failed : ". socket_strerror(socket_last_error()) . "\n");
echo "OK\nBinding the socket on $address:$port ...\n";
echo "OK\nNow ready to accept connections.\nListening on the socket ...\n";

do {//Never stop the daemon
    //它接收连接请求并调用一个子链接socket来处理客户端和服务器间的信息
    $msgsock = socket_accept($sock) or die("sock_accept() failed : ". socket_strerror(socket_last_error()) . "\n");

    //读取客户端数据
    echo "Read client data \n";
    $buf = socket_read($msgsock, 8192);
    echo "Received msg : $buf  \n";

    //数据传输,向客户端写入返回结果
    $msg = "welcome \n";
    socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed : ". socket_strerror(socket_last_error()). "\n");
    //输出返回到客户端时,父/子socket都应通过socket_close来终止
    socket_close($msgsock);
}while(true);

socket_close($sock);

Client.php

<?php
/**
 *  php socket client
 * */

error_reporting(0);                                                                                                                          
set_time_limit(0);

$host = '127.0.0.1';
$port = 2046;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket.\n");

$connection = socket_connect($socket, $host, $port) or die("Could not connect 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);


相关文章
|
7月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?
|
关系型数据库 MySQL PHP
PHP服务环境配置之 WampServer的安装与环境配置
PHP服务环境配置之 WampServer的安装与环境配置
541 0
|
运维 监控 应用服务中间件
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
【运维知识进阶篇】zabbix5.0稳定版详解3(监控Nginx+PHP服务状态信息)(二)
280 0
|
3月前
|
Python
socket 服务
本示例展示了如何使用 Python 的 socket 模块创建一个简单的服务器。服务器绑定到本地主机的 12345 端口,监听客户端连接请求,并向每个连接的客户端发送欢迎消息,然后关闭连接。
130 59
|
12天前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
42 18
|
12天前
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
31 10
|
4月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
10月前
|
JavaScript Java 测试技术
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
118 3
基于微信小程序的家政服务预约系统的+php+vue.js附带文章和源代码设计说明文档ppt
|
9月前
|
移动开发 Java API
Java Socket编程 - 简单的问候服务实现
Java Socket编程 - 简单的问候服务实现
54 0
|
10月前
|
PHP 数据库
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务-2
DIY私人图床:使用CFimagehost源码自建无需数据库支持的PHP图片托管服务
134 0