【问题标题】:Python chat p2p system over internet互联网上的 Python 聊天 p2p 系统
【发布时间】:2014-10-19 18:04:53
【问题描述】:

我想构建一个在 Internet 上运行的点对点聊天引擎。到目前为止,我的代码可以在本地网络上运行,但不能更进一步。这是因为使用 python sockets 监听套接字不会使它们在 LAN 之外可用。

IP 共享知识是可以接受的,即其他人需要知道我的 IP 地址(以及我正在侦听的端口)才能连接到我是可以的。

如何告诉路由器向外界打开一个套接字?据推测,这可以完成,因为诸如 BitTorrent 之类的 p2p 软件必须为客户端之间的通信执行此操作。

【问题讨论】:

    标签: python sockets network-programming


    【解决方案1】:

    正如您所提到的,您必须在路由器上打开一个特定端口并使用该端口进行通信。由于路由器制造商众多,每个制造商都有多种型号,因此建议您查看要使用的路由器的手册。 对于代码,您可以检查您的代码是否在 LAN 上工作,然后查看路由器是否让您将某些端口列入白名单。你可以在网上找到很多简单的例子。 这是我前段时间玩的代码: http://www.mediafire.com/download/vef4q4prkr7be2e/python.socket.zip

    如果您不希望用户弄乱端口和路由器设置等,我能想到的第一个选择是:

    您设置了一个 REST API,在一个界面中可以检索提供的消息(chatRoomName、FromTimestamp、ToTimestamp[,可选地 chatRoomPassWord])但这与套接字无关,您必须使用简单的 HTTP 请求(urllib /urllib2)。当然,可能存在一些解决方法,例如始终列入白名单的端口(如 80 用于浏览器,22 用于 SSH),但您必须搜索此类例外。 请注意,高达 1024 的端口需要使用特殊权限(admin/sudo)。

    附言在传统实现中,其他方(客户端)必须知道您的(IP、端口)二人组才能连接到您(服务器)。

    【讨论】:

    • 是否可以自动执行此操作?假设我希望分发代码;并非所有用户都希望/能够在其路由器上手动设置端口转发。
    • 是的,我马上更新帖子。
    猜你喜欢
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多