码迷,mamicode.com
首页 > Web开发 > 详细

php 基于socket的基本通信

时间:2017-08-14 21:16:38      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:log   mit   pre   tar   计数   limit   9.png   空字符串   输入   

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

技术分享

php 基于socket的基本通信

标签:log   mit   pre   tar   计数   limit   9.png   空字符串   输入   

原文地址:http://www.cnblogs.com/ImCehnyx/p/7359968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!