首页 技术 正文
技术 2022年11月7日
0 收藏 577 点赞 470 浏览 2321 个字

服务端

<?php
error_reporting(E_ALL);
set_time_limit(0);

$ip = “127.0.0.1”;
$port = 1935;

function show_msg($msg){
echo iconv(“UTF-8”, “gb2312//IGNORE”, $msg);
}

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if($socket < 0) {
show_msg(“socket_create() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
show_msg(“socket_set_option() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

if (!socket_set_nonblock($socket)) {
show_msg(“socket_set_nonblock() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

$ret = socket_bind($socket, $ip, $port);
if (!$ret) {
show_msg(“socket_bind() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

$ret = socket_listen($socket, 1);
if ($ret < 0 ) {
show_msg(“socket_listen() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

$clients = array($socket);
while(true) {
$reads = $clients;
$writes=null;
$execs=null;
if(socket_select($reads, $writes, $execs, 2) < 1){
continue;
}

if(in_array($socket,$reads)) {
$newsock = socket_accept($socket);
socket_getpeername($newsock,$remoteIP,$remotePort);
$userSN = $remoteIP.’_’.$remotePort;
show_msg(“————-有新的连接($userSN):,客户数:”.count($clients).”————-\n”);
$clients[$userSN] = $newsock;
}

foreach($reads as $read_sock) {
if($read_sock == $socket){
continue;
}
$data = @socket_read($read_sock, 2048, PHP_BINARY_READ);
socket_getpeername($read_sock, $remoteIP, $remotePort);
$userSN = $remoteIP.’_’.$remotePort;
if($data === false){
socket_close($read_sock);
unset($clients[$userSN]);
show_msg(“($userSN)已断开连接\n”);
continue;
}

show_msg(“从($userSN)接收消息:,$data\n”);
//广播
foreach($clients as $client){
if($client != $socket){
socket_getpeername($read_sock, $remoteIP, $remotePort);
$userSN = $remoteIP.’_’.$remotePort;
show_msg(“发送消息到($userSN):$data\n”);
@socket_write($client,$data,strlen($data));
}
}
}
}

客户端

<?php
error_reporting(E_ALL);
set_time_limit(0);

$ip = “127.0.0.1”;
$port = 1935;

function show_msg($msg){
echo iconv(“UTF-8”, “gb2312//IGNORE”, $msg);
}

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
show_msg(“socket_create() 失败的原因是:” . socket_strerror($socket) . “\n”);
exit;
}

$ret = socket_connect($socket, $ip, $port);
if ($ret < 0) {
show_msg(“socket_connect() 失败的原因是:” . socket_strerror($ret) . “\n”);
exit;
}
while(true){
$msg = “sadfasdfasdfasdf====”;
socket_write($socket, $msg, strlen($msg));
show_msg(“发送消息:$msg\n”);

$msg = socket_read($socket, 8192);
if($msg){
show_msg(“接收消息:$msg\n”);
}

sleep(1);
}
socket_close($socket);
echo show_msg(“关闭OK\n”);

?>

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905