【问题标题】:Finding My Socket's Public IP Address?找到我的套接字的公共 IP 地址?
【发布时间】:2014-03-26 17:00:59
【问题描述】:

我正在尝试让客户端能够输入服务器的 IP 地址/端口并连接到它。为此,我需要服务器的公共 IP 地址/端口。有没有好的方法来做到这一点?到目前为止我尝试过的是......

ip_address = urllib.request.urlopen(<my web server>).read()

Web 服务器只包含 php 脚本:

<?php echo $_SERVER["REMOTE_ADDR"]?>

并且只是存储来自

的端口
s.bind(('', port))

连接到这个 IP 地址和端口超时。有没有更好的方法来做到这一点?

编辑: 好的,所以基本上我正在尝试通过互联网建立连接,但不知道我的路由器将要做什么。如有必要,我可以使用带有任何代码的网络服务器,因为我可以访问永久网络空间。这就是我现在所拥有的。

服务器:

import urllib.request
import threading
import socket

socket_list = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('', 0))

s.listen(10)


def listener(socket):
    while(1):
        data = socket.recv(1024)
        print (data)

def accepter():
    while(1):
        socket, addr = s.accept()
        socket_list.append(socket)
        threading.Thread(target = listener, args = (socket,)).start()

ip_address = (urllib.request.urlopen("<MY WEB SERVER HERE>").read()).decode('utf-8')
print (ip_address)
print (s.getsockname()[1])

threading.Thread(target = accepter, args = ()).start()

客户:

import socket

print ("Enter IP Address")
ip_address = input()
print ("Enter Port")
port = int(input())

s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect((ip_address, port))s2.send("Connected!")
s2.close()

当我运行客户端时,我输入了服务器输出的 IP 地址和端口。不用说,这是行不通的。

【问题讨论】:

  • 那么你需要你的公共IP还是一些外部服务器的?关于您在管道的哪一侧进行操作的问题有点令人困惑。
  • 我需要我的 IP 地址。
  • 我确实是服务器。我在听,但我不知道哪里出了问题。
  • 发布更多我感到困惑的代码。

标签: python networking


【解决方案1】:

我认为这是一个很好的问题,如果您不想像以前那样设置服务器,可以这样做:

""" Easy IP Getter """
import json
import urllib2

info = json.loads(urllib2.urlopen("http://jsonip.com").read())
ip = info["ip"]
print ip

这取决于外部服务,但这不是最好的,如果他们停止工作,您就停止工作。

【讨论】:

  • 我想我也应该说我需要端口号?我应该尝试通过网络服务器建立连接以确定端口吗?我有可以使用的网络空间。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
相关资源
最近更新 更多