PHP Socket

server.php

<?php
// 建立server端socket
$tcp = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $tcp);
socket_bind($socket, '127.0.0.1', 10008);       //绑定要监听的端口
socket_listen($socket);       //监听端口

//初始化一个数据,和客户端通信
$buffer = "connect";
while (true) {
    // 接受一个socket连接
    $connection = socket_accept($socket);
    if(!$connection){
        echo "connect fail";
    }else{
        echo "Socket connected\n";
        // 向客户端传递一个信息数据
        if ($buffer != "") {
            echo "send data to client\n";
            socket_write($connection, $buffer . "\n");
            echo "Wrote to socket\n";
        } else {
            echo "no data in the buffer\n" ;
        }
        // 从客户端取得信息
        while ($data = @socket_read($connection, 1024, PHP_NORMAL_READ)) {
                printf("Buffer: " . $data . "\n");
                //取得信息给客户端一个反馈
                socket_write($connection, "Information Received\n");
        }
    }

    socket_close($connection);
    //关闭 socket
    printf("Closed the socket\n");
}
?>
 

client.php

<?php
// 建立客户端的socket连接
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket, '127.0.0.1', 10008);    //连接服务器端socket

while ($buffer = @socket_read($socket, 1024, PHP_NORMAL_READ)) {
	//服务端告诉客户端,自己的状态
	if (preg_match("/not connect/",$buffer)) {
		echo "don`t connect\n";
		break;
	} else {
		//服务器传来信息
		echo "Buffer Data: " . $buffer . "\n";

		echo "Writing to Socket\n";
		// 将客户的信息写到通道中,传给服务器端
		if (!socket_write($socket, "SOME DATA\n")) {
			echo "Write failed\n";
		}
		//服务器端收到信息后,给于的回应信息
		while ($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) {
			echo "sent to server: SOME DATA\n response from server was:" . $buffer . "\n";
		}

	}
}

?>
 
<think> 我们被要求回答关于PHP socket的使用方法、示例代码及应用场景。 根据引用[1],我们知道网络编程涉及TCP/UDP协议,以及Socket的使用。引用[2]介绍了PHP是一种适用于Web开发的脚本语言。引用[4]则提到了PHP-FPM使用Unix Socket进行通信的配置方法。 用户的需求是PHP socket的相关信息,包括使用方法、示例代码、应用场景。 注意:PHP中可以使用socket扩展来实现网络编程,包括创建socket服务器和客户端,进行TCP或UDP通信。 我们的回答结构: 1. 简要介绍PHP socket编程(参考引用[1]和[2]) 2. 使用方法:包括创建socket、绑定、监听、接收连接(服务器端)以及客户端连接等步骤。 3. 示例代码:分别给出TCP服务器和客户端的简单示例,以及UDP的简单示例。 4. 应用场景:列举常见的应用场景。 注意:由于引用[4]提到了Unix Socket,我们也可以简要提一下Unix Domain Socket(用于同一台机器上的进程间通信)与网络Socket(用于不同机器)的区别,并给出一个简单的Unix Socket示例。 但是,用户的问题可能更侧重于网络Socket(TCP/UDP),所以我们以网络Socket为主,稍微提一下Unix Socket。 由于PHP主要用于Web,所以它的Socket编程在后台服务、即时通讯、游戏服务器等场景也有应用。 我们将按照以下步骤组织回答: 一、PHP Socket简介 二、Socket的使用方法 1. 创建Socket 2. 配置Socket(绑定地址和端口等) 3. 监听(服务器端)或连接(客户端) 4. 数据传输 5. 关闭Socket 三、示例代码 1. TCP服务器和客户端 2. UDP服务器和客户端 3. Unix Socket示例(简要) 四、应用场景 注意:在代码部分,我们将使用PHP代码块,并确保代码简洁且关键步骤有注释。 开始回答: </think> ### PHP Socket的使用方法、示例及应用场景 #### 一、Socket基础概念 在PHP中,Socket是实现网络通信的核心技术,支持TCP/UDP协议: - **TCP Socket**:面向连接,保证数据可靠传输(如网页请求) - **UDP Socket**:无连接,适用于实时性要求高的场景(如视频流) - **Unix Socket**:用于同一服务器内的进程间通信(如PHP-FPM与Nginx交互)[^4] #### 二、使用方法 1. **创建Socket** ```php // 创建TCP Socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); ``` 2. **服务器端流程** ```php socket_bind($socket, '0.0.0.0', 8080); // 绑定IP和端口 socket_listen($socket); // 开始监听 $client = socket_accept($socket); // 接受客户端连接 socket_read($client, 1024); // 读取数据 ``` 3. **客户端流程** ```php socket_connect($socket, '127.0.0.1', 8080); // 连接服务器 socket_write($socket, "Hello Server!"); // 发送数据 ``` #### 三、示例代码 **TCP服务端示例(简易Echo服务器)** ```php <?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($socket, '0.0.0.0', 9000); socket_listen($socket); while (true) { $client = socket_accept($socket); $data = socket_read($client, 1024); socket_write($client, "Echo: $data"); // 返回接收的数据 socket_close($client); } ?> ``` **UDP客户端示例** ```php <?php $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_sendto($socket, "Ping", 4, 0, '192.168.1.100', 6000); socket_close($socket); ?> ``` **Unix Socket通信(PHP-FPM场景)** ```nginx # Nginx配置示例(引用[4]) location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 通过Unix Socket通信 ... } ``` #### 四、应用场景 1. **实时通信系统** - 聊天应用(TCP保证消息可靠性) - 在线游戏服务器(UDP降低延迟) 2. **服务器间通信** - 微服务架构中的服务调用 - 分布式系统节点协作 3. **本地高效IPC** - Web服务器与PHP-FPM通过Unix Socket交互[^4] - 避免TCP/IP开销,提升性能(如Nginx+PHP-FPM配置) 4. **物联网(IoT)** - 设备数据采集(UDP广播传感器数据) - 远程设备控制(TCP发送指令) 5. **网络工具开发** - 端口扫描器 - 自定义协议实现(如私有通信加密) #### 注意事项 - **错误处理**:始终检查`socket_last_error()`并处理异常 - **性能优化**: - 使用`socket_set_nonblock()`实现异步IO - UDP需自行处理丢包和乱序问题 - **安全性**: - 对输入数据严格过滤(防止注入攻击) - 使用SSL/TLS加密敏感数据传输 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值