小弟接触 ruby 时间不长,简单做了个 server 和 client,然后发现通过 ubuntu 和 window 间命令行下使用 socket 通信会简单而快速的返回服务器拒绝通信。在都是 windows 情况下,client 在尝试一段时间后会返回服务器无响应之类的信息然后中断,期间 server 一直处于等待接收状态。查了查发现说是 NAT 和 firewall 的问题吧,小弟网络方面知识相当鄙陋,希望能得到各位的指导,能顺利做出相当于 qq 这样的简易聊天工具。
NAT 就是这样的... 只能 connect 不能 bind (一边连另一边可以,但反过来不行)
如果是自己实现的传输层协议就可以做到双向通信
举个例子,旧的 http 协议只能客户端访问服务器,不能服务器推送到客户端,因为 http 连接也是只有 connect 没有 bind, 所以就有用客户端轮询的方式实现 (每隔一段时间访问一下服务器,看看有什么新东西要推送过来), 然后在这个实现的基础上包装一个双向通信的框架,就是自实现的传输层协议了。
#18 楼 @linjunhalida 这个是通过跳板来实现内网访问吧。可是我的问题是 s-c 链接都有问题,谈不上跳板吧。莫非是用同样的原理实现通信?
@realwol s-c 链接有问题的话估计要用 wireshark 抓一下包,看看包出现什么问题了,你可以本地先测试一下,保证 s-c 本身是没有问题的。
我也遇到过这个问题,使用 TCPServer 时,服务器端放在 XP 的机子上,其它机器客户端能连上,但是服务器端放在 win7 机器上,客户端就连不上,这个是怎么回事?win7 的 server 服务我已经开启了,郁闷啊