我想构建一个在Internet上运行的点对点聊天引擎。到目前为止,我的代码在本地网络上工作,但没有进一步。这是因为使用python sockets
监听套接字并不能使它们在局域网之外可用。
IP可以接受共享知识,即对方需要知道我的IP地址(以及我正在收听的端口)才能连接到我。
如何告诉路由器打开外部世界的套接字?据推测,这可以通过像BitTorrent这样的p2p软件来完成,以便在客户端之间进行通信。
答案 0 :(得分:0)
正如您所提到的,您必须在路由器上打开特定端口并使用该端口进行通信。由于有许多路由器制造商都有各种型号,我建议您查看您要使用的路由器的手册。 对于代码,您可以检查您的代码是否在LAN上工作,然后查看路由器是否允许您将某些端口列入白名单。你可以在网上找到很多简单的例子。 这是我前一段时间播放的代码: http://www.mediafire.com/download/vef4q4prkr7be2e/python.socket.zip
如果您不希望用户搞砸端口和路由器设置等等,我可以想到的第一个选择是:
您设置了一个REST API,在一个界面中,您可以检索提供的消息(chatRoomName,FromTimestamp,ToTimestamp [,可选chatRoomPassWord]),但这与套接字无关,您必须使用简单的HTTP请求(urllib) / urllib2的)。当然,可能存在一些解决方法,例如总是列入白名单的端口(如浏览器为80,SSH为22)但您必须搜索此类异常。 请注意,最多1024个端口需要使用特殊权限(admin / sudo)。
P.S。在传统的实现中,其他方(客户端)必须知道你的(ip,port)二人组才能连接到你(服务器)。