【问题标题】:Python- can't connect to my IPPython-无法连接到我的 IP
【发布时间】:2016-09-14 18:28:35
【问题描述】:

我开始学习计算机网络,并尝试在 Python 中使用套接字。 在 youtube 视频的帮助下,我在服务器和客户端之间制作了一个非常简单的聊天程序。 当我尝试将客户端与“localhost”连接时,它按我想要的方式工作。但是当我尝试使用 IP 地址(我在 findmyip.org 上找到的,例如 12.123.12.123)时,它只是没有显示任何连接迹象。 服务器是:

import socket
import sys

def socket_create():
    try:
        global host
        global port
        global s
        host = ''
        port = 9998
        s = socket.socket()
    except socket.error as msg:
        print "socket creation error bluhbluh"
    print "socket created"

def socket_bind():
    try:
        global host
        global port
        global s
        print "Binding socket to port"
        s.bind((host,port))
        s.listen(5)
    except socket.error as msk:
        print "socket binding error"
        socket_bind()


def socket_accept():
    conn,address = s.accept()
    print "connection has been established"
    print address[0]
    send_msg(conn)
    conn.close()

def send_msg(conn):
    while 1:
        mess=raw_input()
        if mess == "quit":
            conn.send(mess)
            conn.close()
            s.close()
            sys.exit()
        if len(mess)>0:
            conn.send(mess)
            resp=conn.recv(1024)
            print resp

def main():
    socket_create()
    socket_bind()
    socket_accept()

main()

客户是:

import socket
import os
import sys

s = socket.socket()
host = '12.123.12.123' #replace with 'localhost' for a working version! :D 
port = 9998
s.connect((host,port))

while 1:
    data = s.recv(1024)
    print data
    if data=="quit":
        s.close()
    else:
        mess=raw_input()
        s.send(mess)

我之前遇到过这个问题,据我所知,我当时也没有设法解决它.. 我尝试了端口转发(至少我认为我做对了) 我希望你能帮助我 提前谢谢你:)

【问题讨论】:

  • "我尝试了端口转发(至少我认为我做对了)" - 从您的网络内部连接到外部地址并被转发回来,需要特殊支持在防火墙/路由器上。它通常被称为“发夹 NAT”或“环回 NAT”。如果您有基本的家用设备,它可能根本不支持这样做。

标签: python sockets networking ip


【解决方案1】:

您的问题可能与网络有关。您发布的 IP 就是所谓的可路由 IP,即暴露在互联网上的 IP。它通常被分配给 ISP 提供的调制解调器或路由器的 WAN 端。像您的 PC 这样的机器通常位于网络设备的 LAN 端,并且可能会被分配一个不可路由的 IP,这些 IP 在 Internet 上是看不到的。

当您访问显示您的 IP 的站点时,它显示的是您的可路由 IP,而不是分配给您机器的网络设备。要查看该地址,您可以在 Windows 的命令窗口中键入“ipconfig”,或者在 linux 和 mac 的终端 shell 中键入“ifconfig”。您应该在该输出中看到一个或多个包含 IP 地址的接口的列表。一个可能有 127.0.0.1 的地址,它等于 localhost,被称为您的环回地址。您可能会看到另一个以 10. 或 192. 开头的文件。该地址可能是网络设备分配给您的地址。你可以试试那个地址,看看你的程序是否有效。

【讨论】:

  • 我尝试了 192。它确实有效。但是如果我想把这个客户端发送给一个住在远方的朋友,我需要输入哪个IP?可路由的IP?不可路由的IP?
  • 因此,有几种方法可以做到这一点,并且需要对如何配置网络设备有所了解。我建议的最好方法是使用端口转发。如何配置它取决于您的设备。本质上,端口转发所做的就是说,任何发往端口 X 上的 WAN IP A 的流量都将其重定向到端口 Y 上的 LAN IP B。它会将您机器上的该端口公开给互联网,但只有您分配的那个端口。根据您编写程序的方式,这可能必须在双方都完成。
  • 好的,所以我和朋友一起使用了可路由的 IP,然后端口转发了它,它工作了。谢谢! :)
猜你喜欢
  • 2019-12-01
  • 2023-04-05
  • 2018-09-15
  • 1970-01-01
  • 2017-03-31
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多