php 基于socket的基本通信

1、前言

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

这种介绍度娘很多,希望了解更多的自行百度,往下看的朋友记得先开启socket扩展;

2、创建socke服务器端

基本步骤:

  • 初始化86socket
  • 端口绑定
  • 端口进行监听
  • 调用accept阻塞
  • 等待客服端连接

3、服务器端代码实现

<?php
echo "****************server*****************\r\n";
//设置 IP 和 端口(端口必须保证不被占用,且允许被外部访问)
$ip = "127.0.0.1";
$port = 1935;//超时设计
set_time_limit(0);//创建socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("创建socket失败,原因为:{socket_strerror($socket)}\r\n");//绑定socket到指定ip和端口
$ret = socket_bind($socket, $ip, $port) or die("绑定socket失败,原因为:{socket_strerror($ret)}\r\n");//监听socket,最大等会数为4
$ret = socket_listen($socket, 4) or die("监听socket失败,原因为:{socket_strerror($ret)}\r\n");//计数
$count = 0;
echo "等待连接!!!\r\n";
do {//收到请求连接//调用子socket处理信息$msgsock = socket_accept($socket);if(!$msgsock){echo "socket阻塞失败,原因为:{socket_strerror($msgsock)}\r\n";}$msg = "<p style='color:red'>连接成功</p>";//处理客服端输入并返回数据
    socket_write($msgsock, $msg, strlen($msg));$buf = socket_read($msgsock, 8192);$talkback = "收到的信息为:{$buf}\r\n";echo $talkback;if(++$count > 5) {break;}socket_close($msgsock);
} while(true);socket_close($socket);

4、创建slient客户端

基本步骤:

  • 使用TCP协议创建一个socket资源
  • 连接socket服务器
  • socket_write 传输数据
  • socket_read 接收数据
  • 关闭socket资源

5、客户端代码实现

<?php
echo '****************client*****************<br/>';
//设置 IP 和 端口
$port = 1935;
$ip = '127.0.0.1';//超时设计
set_time_limit(0);//创建TCP协议的socket资源
$socket  = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die('socket_create 失败:'.socket_strerror($socket));
echo '创建成功<br/>';
$restult = socket_connect($socket, $ip, $port);
echo '连接成功<br/>';$in = '创建一个sokcet客服端成功,随机编号='.rand(1000,9999);
if(socket_write($socket, $in, strlen($in))) {echo '发送成功,发送信息为'.$in.'<br/>';
} else {echo '发送失败,原因为'.$socket_strerror($socket).'<br/>';
}while($out = socket_read($socket, 8192)) {echo '接收信息成功,信息为'.$out.'<br/>';
}echo 'socket关闭<br/>';
socket_close($socket);
echo '关闭完成<br/>';

6、开启客服端

7、使用客户端连接服务端

服务端状态:

到这里socket的基本连接就差不多了。

8、相关行数介绍

8.1、socket_create

用于创建一个socket资源,成功返回一个套接字,失败返回false;

详情参考:http://www.php.net/manual/zh/function.socket-create.php

8.2、socket_bind

绑定一个名称到socket,成功返回true,失败返回时false;

详情参考:http://php.net/manual/en/function.socket-bind.php

8.3、socket_listen

监听一个socket资源,成功返回true,失败返回时false;

详情参考:http://php.net/manual/zh/function.socket-listen.php

8.4、socket_accept

合法创建一个子socket,成功返回一个新的socket资源,失败返回false;

详情参考:http://www.php.net/manual/en/function.socket-accept.php

8.5、socket_read

读取客服端发送的信息,成功返回读取的信息,否则返回空字符串

(socket_read() returns a zero length string ("") when there is no more data to read.)

详情参考:http://www.php.net/manual/en/function.socket-read.php

8.6、socket_write

想socket写入数据到缓存

详情参考:http://php.net/manual/en/function.socket-write.php

8.7、socket_close

关闭socket资源

详情参考:http://php.net/manual/zh/function.socket-close.php

8.8、socket_strerror

获取错误信息

详情参考:http://php.net/manual/zh/function.socket-strerror.php

转载于:https://www.cnblogs.com/ImCehnyx/p/7359968.html

php 基于socket的基本通信相关推荐

  1. Linux下基于socket多线程并发通信的实现

    pthread_server.c /*************************************************** * 文件名:pthread_server.c * 文件描述: ...

  2. 基于socket网络编程技术实现TCP和UDP的流程详解及实例

    具体函数讲解太多,根据程序自行分析. 可以参考这篇文章: https://blog.csdn.net/qq_41687938/article/details/119102328?spm=1001.20 ...

  3. asp.core api 通过socket和服务器通信发送udp_python socket之TCP/UDP

    #coding=utf-8 # socket #网络中进程之间通信:网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应 ...

  4. C语言 linux环境基于socket的简易即时通信程序

    转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html      --By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易 ...

  5. python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...

  6. socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例

    本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...

  7. socket网络编程——基于socket通信实现对客户端与服务器间的文件互传

    客户端与服务器间的文件互传 基于socket的文件数据互传,将文件中所有的字符一一通过buf进行传递,为了更好地判断文件的 结束,通过添加文件结束标识符"#",当接收端接收到该字符 ...

  8. java socket 通信协议_java 基于TCP协议的Socket编程和通信

    java 基于 TCP 协议的 Socket 编程和通信 在网络通讯中,第一次主动发起通讯的程序被称作客户 端 (Client) 程序, 简称客户端, 而在第一次通讯中等待连接的 程序被称作服务器端 ...

  9. 【Java】GUI界面聊天小程序(基于Socket的客户端服务端通信)

    基于Socket的客户端服务端通信--Java GUI界面小程序 Socket概念及其通信过程: Socket是TCP/IP中的基本概念,它负责将TCP/IP包发送到指定的IP地址.也可以看成是在两个 ...

最新文章

  1. 微软最新启动了一个 I'm 活动
  2. [120_移动开发Android]005_android开发之数据存储之文件操作
  3. 二叉树节点间的最大距离
  4. 宝塔清mysql主从日志_宝塔面板Mysql主从日志文件mysql-bin文件清除方法
  5. Docker基本组成 和 基本命令
  6. 实现Java监视的12个步骤程序存在缺陷
  7. 剑指Offer - 面试题53 - II. 0~n-1中缺失的数字(二分、位运算)
  8. cds5516舵机控制程序_[电力世界]中的应用程序CDS
  9. Java-第N篇推荐的一些学习书籍
  10. notepadpython插件_Notepad Python
  11. 傲腾optane介绍
  12. glTF格式介绍——目录
  13. 你现在还在自己洗碗?教你制作单片机的洗碗机控制器
  14. 2054339-01-2,N-Boc-N-bis(PEG2-acid)它可以在活化剂(如EDC或HATU)存在下与伯氨基反应
  15. Weka package manager 出错的解决办法
  16. C# 多线程 Invoke BeginInvoke
  17. lol德玛西亚登录服务器未响应,LOL客户端又出现问题?大量玩家无法登陆,解决方法已出现!...
  18. 2022电赛声源定位(基础篇)
  19. Uniswap V3流动资金池遭遇网络钓鱼攻击,已损失价值3278ETH的NFT头寸,约合3563644美元。
  20. S-Transform

热门文章

  1. c#操作Excel整理总结
  2. Linux之父盟友分道扬镳 直言开源模式软肋
  3. 如何选择分布式系统(区块链)协议?
  4. s3 aws_您需要了解的有关AWS S3的所有信息
  5. 前端和后端开发人员比例_前端开发人员vs后端开发人员–实践中的定义和含义
  6. bokeh pandas_使用Pandas和Bokeh将Rolling Stone的500张最伟大专辑可视化
  7. 构建node.js基础镜像_在Android上构建Node.js应用程序
  8. 哪些人适合学习软件测试
  9. react es6+ 代码优化之路-1
  10. Hibernate复习之Hibernate基本介绍