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

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

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

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

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

API 手册在线预览:Swoole API Manual

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

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

PHPstorm使用演示(其他IDE同理):

个人特别喜欢 swoole 编程,感觉好强大

 

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

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

哈哈!有啥问题 可以回复解决额;大家可以一起交流讨论;

转载于:https://my.oschina.net/wangjie404/blog/718434

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值