|
|
1
2
如果你想发送消息,你需要在任何充当服务器的设备(任何创建套接字服务器的设备)上设置端口转发。端口转发在路由器上完成。你无法连接到另一个客户端的原因是它们隐藏在路由器防火墙后面。他们对世界其他地方的地址实际上是路由器的地址,而不是他们物理计算机的地址。在他们的本地网络上,他们的地址与世界其他地方看到的地址不同,路由器根据地址转换表计算出需要将来自外部世界的哪些消息发送到客户端。 考虑到您的体系结构,这意味着所有客户端都需要让他们的路由器进行端口转发,这当然是不可行的(想象一下gtalk或aim要求用户进行端口转发)。 更常见的体系结构是让服务器将消息重新广播到连接的客户端,并维护表来查找谁与谁交谈。这样,就有一个需要静态ip(或端口转发)的服务器,所有用户都只是连接到服务器套接字并从中读取消息的客户端。 有关描述第二种体系结构的实际代码,请参阅 http://pirate.shu.edu/~wachsmut/Teaching/CSAS2214/Virtual/Lectures/chat-client-server.html 然后,运行服务器代码的机器需要一个静态ip,或者如果它在路由器后面,则需要来自它正在侦听的端口的流量进行转发。 因此,在服务器代码上,您将绑定到路由器分配的ip(在某个端口,比如5000,类似192.168.1.2)。然后转到路由器配置页面(可能是192.168.1.1,请参阅 http://www.wikihow.com/Port-Forward/Open-Ports-on-a-Linksys-Router ),并将端口5000转发到地址192.168.1.2。 |
|
|
2
2
|