php socket 服务端
服务端代码使用到的命令 (代码中有详细注释)
- socket_create() — 创建 socket 套接流
- socket_bind() — 绑定接收的socket主机和端口,与客户端相对应
- socket_listen() — 监听socket
- socket_accept() — 接收客户端传入的信息资源
- socket_read() — 读取信息,并转为字符串
- socket_write() — 向socket_accept的套接流写入信息
- socket_last_error() — 获取socket的最后一条错误码码
- socket_strerror() — 获取错误码对应的错误信息
- socket_close() — 关闭socket套接流
<?php
class Server
{const HOST = '127.0.0.1'; // 主机地址const PORT = '9600'; // 端口public $socket = null; // 存放socket套接流public $acceptResource = null; // 存放socket_accept的套接流public function __construct(){/*** 创建 socket 套接流* 参数一:网络协议 【AF_INET(IPv4), AF_INET6(IPv6), AF_UNIX(本地通讯)】* 参数二:类型 【SOCK_STREAM(TCP), SOCK_DGRAM(UDP), SOCK_SEQPACKET, SOCK_RAW, SOCK_RDM】* 参数三:protocol协议 【tcp, udp, icmp】tcp和udp可以直接使用常量 SOL_TCP, SOL_UDP*/$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);// 绑定接收的 socket 主机和端口$this->bind();// 监听socket$this->listen();do {// 接收客户端传入的信息资源 再 读取转化成字符串$str = $this->acceptAndRead();// 发送信息给客户端$this->write($str);// 关闭socket_accept的套接流socket_close($this->acceptResource);} while (true);// 关闭socket套接流socket_close($this->socket);}/*** socket_bind 绑定接收的socket主机和端口,与客户端相对应* 参数一:socket资源对象* 参数二:主机地址* 参数三:端口*/public function bind(){$res = socket_bind($this->socket, self::HOST, self::PORT);if (!$res) {/*** socket_last_error 获取socket的最后一条错误码码* socket_strerror 获取错误码对应的错误信息*/die('绑定失败 - '. socket_strerror(socket_last_error()));}}/*** socket_listen 监听socket* 参数一:socket资源对象* 参数二:监听的最大个数 (允许同时连接的客户端数量)*/public function listen(){$res = socket_listen($this->socket, 4);if (!$res) {die('监听失败 - '. socket_strerror(socket_last_error()));}}/*** 接收客户端传入的信息资源 再 读取转化成字符串*/public function acceptAndRead(){/*** socket_accept 接收客户端传入的信息资源* 参数一:socket资源对象*/$this->acceptResource = socket_accept($this->socket);if (!$this->acceptResource) {die('接收信息失败');}/*** 读取信息,并转为字符串(客户端传入的消息)* 参数一:socket_accept 返回的信息资源* 参数二:指定读取的最大字节数*/$str = socket_read($this->acceptResource, 1024);var_dump($str);return $str;}/*** 向客户端发送信息* @param string $str 客户端传入的消息*/public function write($str){$str = '给客户端发的信息 - '. $str;/*** socket_write 向socket_accept的套接流写入信息 也就是向客户端发送消息* 参数一:socket_accept的套接流* 参数二:消息字符串* 参数三:消息字符串长度*/socket_write($this->acceptResource, $str, strlen($str));}
}
new Server();
php socket 服务端相关推荐
- 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...
HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...
- Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态
通过 getattr(socket, '_closed') 的返回值可以判断服务端的运行状态. True 是关闭状态,False 是运行中. 实例代码展示: import socketip = 'lo ...
- Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受
一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类 Serve ...
- php socket(服务端与客户端)demo
php socket(服务端与客户端)demo完整演示: 环境是:[phpstydy,PHP版本7.3.4nts],一定要开启[sockets]服务. 服务器[index.php](源码复制即可): ...
- [置顶] C#中Socket服务端代码分享
最近在对项目中Socket通讯中的服务端代码进行优化,保证能接受尽可能多的客户端的连接,并且不会丢掉连接,不会掉数据包.经过一段时间的反复测试和修改,终于达到了这一要求.服务端代码采用了异步通讯的方式 ...
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...
- Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView
Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...
- 《零基础看得懂的C语言入门教程 》——(十三)socket服务端编写
一.学习目标 了解C语言的socket的概念 了解C语言socket的使用方法 完成C语言socket服务端 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语言. 第一篇:(一)脱离学习 ...
- android socket 服务端,Android socket 服务端
Android socket 服务端 Android 想在Android 上跑一个 socket 服务端.把在java工程里运行起来的代码直接放到android项目里来,开启线程,创建ServerSo ...
- java学习(166):socket服务端和客户端连接
socket服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;//socket服 ...
最新文章
- 西湖大学三位资深博导自述:我与我的第一位博士生
- First Unique Character in a String(leetcode387)
- linux mint系统分区,Win7删除了linuxmint的系统分区如何恢复
- es中的Coordinator
- 灰度图像--图像增强 Robert算子、Sobel算子
- 产品要不要做先回答的10个问题
- Log4j 2漏洞(CVE-2021-44228)的快速响应
- windows下使用net-snmp实现agent扩展(一)
- ubuntu系统DD对拷还原报废笔记本
- 文字超出显示....省略显示
- ADO.NET与抽水的故事 系列三——抽水机—Command
- 面向对象编程,设计原则,设计模式
- 关于 System.getProperty
- ubantu中让g++支持c++11的办法
- 研发管理系统选型必读
- mysql数据库原理及应用教案_《数据库原理及应用》全套教案.doc
- Xamarin学习笔记之尝试篇
- RT-Thread硬件测试(一)—— 485串口测试
- 破解蛋白质结构秘密的AlphaFold
- aardio - 【开源软件】aardio文件加解密