一个投影问题引发的作死行为

2018-04-26

这片文章主要是记录一下我解决一个问题的过程, 也叫作死过程….

这就要扯老远了. 我们实验室每周一都有个进度汇报, 汇报上周干了什么, 进度如何. 有的时候需要展示自己写的项目成果, 或者看的论文抄录做成ppt展示什么的都需要展示. 国外的实验室典型的一套全是苹果, 所以基本上人手一台macbook, 所以展示自然用airplay, 而且确实很方便.

去年的时候我就是个研究生, 用的一直都是linux, 所以展示自己的成果的时候, 就遇到了问题. 我一个linux用户怎么可能像macbook那样配套的展示. 然而我网上查了一下linux能否像macbook那样使用airplay展示呢, 还真让我找到了, 叫open-airplay, 然后按照上面的教程, 虽然有点瑕疵, 延迟还很大, 不怎么连贯, 有卡顿, 但是效果还是不错的.

然后从去年的进度汇报我一直都是用的open-airplay展示自己的项目, 直到这周一的汇报, 突然出了问题. 怎么连都连不上appletv, 然后差不多过了三分钟左右, 就会报timeout的错误.

然后我就准备解决这个问题. 我本来一看open-airplay里面还有php的版本, 哇塞这不是我的老本行吗, 然后我用php运行试试. 一开始报了split函数不存在的错, 这个可以理解, 毕竟我的电脑上php已经7.0了, 而split这个函数早就废弃了. 改了代码之后发现还是报错, 说找不到/tmp/airplay.jpg这个文件. 恩?这个文件是个啥, 为啥会在/tmp/里面, 后来看了会儿源码, 差不多懂了这个open-airplay的运行机制.

啊这个运行机制非常傻瓜的, 就是不断的对屏幕进行截屏, 然后截屏图片存在/tmp/里面,然后在把图片通过协议与appletv进行socket通信, 图片传输完成就删除, 然后再接着截图进行不断循环. 具体的协议内容戳这, 这个虽说是非官方, 但是用这个还是能很好的解决问题不是嘛(笑).

差不多看懂了之后, 我就直接投影一张已经存在的图片, 啊反正动态投影实质还是传输图片, 但结果就是连图片都传输不了. 这就非常费解了. 这说明我的电脑与appletv基本失联? 数据传输socket通信就出了问题.

但是通信问题又有很多的原因. 1. appletv服务端口被封了, 启用了防火墙. 2, 我这边数据没有发出去, 这种情况一般是java或者php的通信库版本出了问题导致通信障碍. 3. 我的电脑根本找不到appletv. 然后我暂时就想了这么多的原因

对于问题1, 我掏出了我的ip6…..然后屏幕投影成功……看来appletv还能用.

随后我就陷入了迷茫. 还好我的实验室博士也是用的linux系统, 我用他的电脑试验了airplay, 居然投影成功了. 我更迷茫了. 题外话, 博士的linux是debain, 之前他装了linux mint, 不知道为啥又换了debain了…

一开始博士说应该是java版本的问题. 他用的openjdk, 版本似乎是1.2, 然后他建议我直接重装java…….说实话我是不甘心的. 毕竟我的java是去年12月才装的, 是java SE 9, 去年10月份的新版本java, 版本太旧导致的通信问题我还信, 这么新而且前几个月我都用的好好的绝对不是java版本的问题.

然后我就想确定是不是appletv找不到的原因. 自己的电脑nmap扫描下appletv的7000端口, 直接说host has done….然后博士的电脑扫, 显示airplay服务运行的好好的. 这个时候我就隐隐觉得, 应该是网络的问题. 查了下ip, 然后我发现我的ip不是192.168.11段的ip, 而是10.253.88段的ip, 而博士电脑和appletv的都是192.168.11段的, 包括我自己的ip6也是192.168.11段的.

随后我用博士的电脑找我的电脑, 然后居然找的到, 我找博士的电脑, 就直接说host has done. 这说明, 我的电脑和appletv和其他的电脑就不在一个子网下.

说实话, 在亲眼确认了ip我才敢下这样的结论. 因为我们所有的设备连接的网络都是我们实验室网路vizlabRI下, 按道理, 肯定在同一个子网下啊.

之后我想看实验室路由器的配置, 难道ip不够分? 实验室讲道理没那么多设备啊. 后来从博士那边知道了airport这个app, 原来实验室的路由器也是苹果的…..看了下配置,也没发现什么异常, 但是我发现路由器的ip和我的网段一样的….看来我现在电脑应该和路由器平级啊, 啊难怪博士的电脑找得到我, 我找不到他的电脑.

后来我就想让路由器重新给我分配正常的ip, 但是不知道为啥, 时候重启,重连网络, 网段至始至终都是和路由器一样, 不在它的子网下. 后来没辙了, 然后作死开始了, 就想着要不指定ip吧, 把我的mac地址绑定子网固定ip, 而不是动态分配ip. 设定好了, 更新好了, 然后路由更新好配置后, 我的手机, appletv的ip全都跑到路由器的网段去了…..然后学长的电脑还在路由器子网下, 但是已经连不上外网了….我们这些跑到路由器一个网段下的设备还能连外网.

突然想起来前几天收到学校通知说, 学校ip分配告急….我们这种直接占学校总子网下的ip真的好嘛….总感觉boss要被学校批评了…当然这是那时候的随意瞎想. 这个时候我看电脑和appletv还在一个网段下试了下appletv, 啊果然可以投影了.

所以现在主要问题就是实验室路由器突然罢工了, 拒绝给我们这些连接的设备分配ip, 直接交给它上层的路由器了, 让上层路由器分配ip. 这咋行. 但是也不知道怎么办啊. 看到airport上的一条消息说, 这个路由器出现了问题, 一个建议的方案就是将路由器改为桥接模式…..然后我们就手贱改了桥接…然后路由器….就直接变成了个转接器…想从桥接模式改成动态分配ip都不行了. 随后就只能将路由器恢复成出厂设置.

这里还有个小插曲. 原本实验室201的路由器是负责分配ip的, 然后实验室202的路由器则是桥接到201的, 所以两个路由器都是无线网vizlabRI. 恢复出厂设置后, 设置网络名字叫vizlabRI, 然后等了十分钟还再转圈圈才反应过来应该是网络冲突了. 还有就是在创建网络连接外网的时候, 死活连不上外网, 后来没辙了, 就把所有路由器上乱七八糟的网线拔了, 就留一个学校那边的联网线, 结果还是连不上, 然后才发现, 原来网线插错位置了, 听博士说前几个月进来的时候路由器的插线都被人拔了,然后他插上去的…..估计就是那个时候插错的…..妈诶纠结了这么久原来是博士网线插错的缘故.

插对了网线之后, 路由器就成功连上外网的, 然后创建网络成功. 然后手机电脑设备连上网络之后, ip也分配的非常正常, 然后终于可以接着愉快的使用appletv进行进度汇报了!

哎…谁能想到一个无法使用open-airplay进行屏幕投影的原因居然是实验室路由器的网线插错了导致ip分配的非常迷….因为一个小小的问题把整个实验室的网络都整改了….感觉可以吹牛逼了哈哈哈哈

后话

然后第二天早上就收到学校的异常邮件….哎…感觉有点玩的过火了.

email


Blog comments powered by Disqus