Home > php教程 > php手册 > php socket 多客户端连接示例

php socket 多客户端连接示例

WBOY
Release: 2016-06-06 20:13:13
Original
1884 people have browsed it

?php/*** File name server.php* 服务器端代码** @author bandit* @since 2014-09-09**///确保在连接客户端时不会超时set_time_limit(0);//设置IP和端口号$address = localhost;//$port =rand(3000,6000);$port = 8081; //调试的时候,可以多换端口来测试程

<?php /**
* File name server.php
* 服务器端代码
*
* @author bandit
* @since 2014-09-09
*
*/
//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "localhost";
//$port =rand(3000,6000);
$port = 8081; //调试的时候,可以多换端口来测试程序!
/**
* 创建一个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");
//端口复用
if (!socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo 'Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
}
//绑定到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";
while(true){
$pid = pcntl_fork();
if($pid == -1){
die('fork error');
}elseif($pid){
//父进程会得到子进程号,所以这里是父进程执行的逻辑
//pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。
}else{
//$msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
while($msgsock = socket_accept($sock)){
//它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息
do{
//读取客户端数据
echo "Read client data \n";
//socket_read函数会一直读取客户端数据,直到遇见\n,\t或者&#92;&#48;字符.PHP脚本把这写字符看做是输入的结束符.
$buf = socket_read($msgsock, 8192);
echo "Received msg: $buf?? \n";
$msg = "you said $buf \n";
socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
}while(true);
socket_close($msgsock);
}
}
}
socket_close($sock);
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template