第二章: TCP服务器端/客户端的开发

推荐 swoole ide:https://github.com/eaglewu/swoole-ide-helper 下载放在项目目录php

Swoole 在IDE下自动识别类、函数、宏,自动补全函数名git

Swoole 结构,便于开发过程当中查看文档,以及屏蔽IDE undefined 提示,便于快速查看函数用法。github

Swoole releases 版本下载地址:https://github.com/swoole/swoole-src/releases编程

API 手册在线预览:Swoole API Manualapi

开发Swoole项目同时,在IDE中打开/导入本文件便可。服务器

使用 IDE自带 Include Path 功能引入 helper 目录swoole

PHPstorm使用演示(其余IDE同理):网络

我的特别喜欢 swoole 编程,感受好强大异步

 

不说了直接上代码试试效果:tcp

TCP服务器端

server.php

<?php
    /**
     * User: wangjie404
     * Date: 2016/7/26
     * Time: 14:19
     * TCP Server
     */
    //0.0.0.0表示监听全部地址,9501表示端口

    $server = new swoole_server('0.0.0.0',9501);
    //开始事件函数回调的设定 ,创建链接
    $server->on("connect",function(swoole_server $ser,$fd,$from_id){
       echo  "Connected";
       $ser->send($fd,"hello\n");
    });
    // 接收数据 $data 发来的数据
    $server->on("receive",function(swoole_server $ser,$fd,$from_id,$data){
         //接收客户端数据
        echo "received:".$data;
        /**
         *发送数据到客户端
         *发送的数据。TCP协议最大不得超过2M,UDP协议不得超过64K
         *发送成功会返回true,若是链接已被关闭或发送失败会返回false
        */
      //  $ser->send($fd,'Server:hello');
$ser->send($fd,'Server:吃了\n');
    });
    // 关闭连接
    $server->on("close",function($ser,$fd,$from_id){
        echo  "close";
    });
    $server->start();

?>

进入你的文件所在目录 运行 php server.php

打开一个新的窗口  输入 telnet 你的ip 端口  输入内容 查看 服务器响应的消息

备注:一个server 是能够接受多个连接 的具体本身操做了。

 

2.本机回环(127.0.0.1),局域网通讯,外网通讯3种方式的差别

本机回环127.0.0.1 内存 等于进程间的通讯 延迟微妙级别
局域网 192.168.11.1 网卡-交换机 千兆 or 万兆网络 0.2-1ms左右
外网  14.18.203.64 网卡-路由器-英特网 非公网IP不可用 10-100ms

3.数据包从操做系统到网卡、交换机、路由器、互联网,再到客户端的网络环境,到用户主机操做系统,最后到客户端程序

下面 来介绍一下 TCP/IP协议4层

1.链路层:交换机从主机到网线到交换机到路由器

2.网络层:从网关到外面  ,各个路由器之间的转发

3.传输层: 主要有tcp/udp udp为比较原始的传输方式

4.应用层:协议  就是咱们的http ,smtp 等

 

4.路由协议 :

路由器之间交换信息,BGP

网关就是出口路由器 如 192.168.1.1

网络段,主机段 192.168.1.100

掩码:255.255.255.0

广播 :192.168.1.255

DNS:应用层概念用于将域名解析为ip,UDP

 

########################################################

下面 介绍 tcp_client 就不用经过  telnet 方式链接了

直接上代码:

<?php
/**
 * User: Administrator
 * Date: 2016/7/26
 * Time: 15:55
 */
//经过tcp 方式,异步

$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);

//@param $event_name
//@param $callback_function
//打开链接
$client->on("connect",function($cli){
echo "client connected.\n";
});
//关闭连接
$client->on("close",function($cli){
    echo "client close.\n";
});
//错误信息(必须 否则会报错)
$client->on("error",function($cli){
    echo "error.\n";
});

//接收服务器信息
$client->on("receive",function($cli,$data){
    echo "received:$data\n";
  // 每隔3秒向服务器发送消息
    sleep(3);
    $cli->send('吃饭了么?');
});
//下面是我虚拟机的IP 
$client->connect('192.168.11.91',9501);

运行php server.php

运行php client.php

哈哈!有啥问题 能够回复解决额;你们能够一块儿交流讨论;

相关文章
相关标签/搜索