PHP如何实现简单的Socket

编程之家收集整理的这篇文章主要介绍了PHP如何实现简单的Socket编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

PHP如何实现简单的Socket

PHP如何实现简单的Socket

首先使用PHP制作的Socket服务端,其主要设置Socket的IP地址及端口号;然后监听端口,如果有客户端连接的话,则接收连接请求和数据,最后处理数据并且返回数据即可

示例代码

<?PHP
//确保在连接客户端时不会超时
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);

推荐教程:《PHP教程

总结

以上是编程之家为你收集整理的PHP如何实现简单的Socket全部内容,希望文章能够帮你解决PHP如何实现简单的Socket所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

PHP相关文章

php中有以下五种方法来检测变量是否为空,那么这五种方法之间有什么区别呢?下面我们就来一起看看吧。1、isset功能:判断变量是否被初始化说明:它并不会判断变量是否为空,可以用来判断数组中元素是否被定义过。
字符串函数 strlen:获取字符串的长度,获取的是字符串的字节长度 字符:一个完整的符号,a,中 字节:由8位组成 一个字符最少等于一个字节:ASCII码,a,b,通常英文字符都是占用一个字节 中文在gbk或者gb2312编码里,占用两个字节 中文在utf-8里最少占用3个字节,有可能是4个字节 substr:截取字符串,以字节为单位截取 string sub...
数据的操作无外乎就是对数据的增删改查增加数据基本方式:insert into 表名 [(字段列表)] values (值列表);主键冲突:在插入数据的时候,主键值已经存在了,但是要求是必须使用该主键字段 实现目标:如果该主键不存在那么就增加记录,如果存在,就修改部分字段的值1.使用主键冲突方式语法:insert into 表名 values(值列表) on dup...
范式:Normal Format规定的一种设计方式范式特点:范式有很多,从低级到高级有六级左右,低级往高级一级比一级要求严格。关系型数据库通常设计只需要满足其中一半,满足第三范式即可。满足第三范式必须先满足第二范式,第二范式又必须先满足第一范式。第一范式:1NF数据表的设计的字段中,每个字段都不能再分,每个字段都必须是最小的不可分割的单位(原子性) 讲师代课表 要知...
在字段类型之后,用于对当前字段进行一系列的约束的内容(限制内容的情况) 字段属性:null/not null,primary key,auto_increment,unique key,comment,defaultnull表示字段的值可以为空(在进行数据插入的时候,该字段可以不给数据),not null表示不能为空,必须要给定值(不能是null)default默...
mysql中也分为三大数据类型:数值型,字符型,时间日期型 数值型数值型分为整数型和小数型(包含小数部分的数据类型)整型mysql中光整数型数据类型就有五种:tinyint,smallint,mediumint,int,bigint tinyint:迷你整型,占用1个字节保存数据,能够表示256个数值 smallint:小整型,占用2个字节保存数据,能够表示6...
校对集就是数据库数据进行比较的时候所采用的比较方式。 A =======&amp;gt; 01000001 =======&amp;gt; 65 a =======&amp;gt; 01100001 ========&amp;gt; 97校对集有三种比较方式 _bin:使用二进制进行比较(区分大小写) _ci:(case insensitive),大小写不敏感,不区分大小写(将某个字符转变成...
1.mytable1存储的数据是utf8字符集(在创建表的时候,指定了表的数据存储字符集为utf8)2.cmd控制台只能是gbk格式的数据:说明cmd下只能输入和显示gbk格式的数据3.set names gbk的功能 客户端与服务端进行不同编码的通信的原理 了解数据库的字符集 查看数据库支持哪些字符集?show character set; mysql支持39种字...
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注