我試圖創建一個客戶端輸入服務器的IP地址/端口並連接到它的能力。爲了做到這一點,我需要服務器的公共IP地址/端口。有沒有一個好的方法來做到這一點?我已經試過到目前爲止...查找我的套接字的公共IP地址?
ip_address = urllib.request.urlopen(<my web server>).read()
只包含PHP腳本的Web服務器:
<?php echo $_SERVER["REMOTE_ADDR"]?>
而只是存儲從
s.bind(('', port))
連接端口到這個IP地址和端口超時。有一個更好的方法嗎?
編輯: 好吧,所以基本上我試圖通過互聯網建立連接,而不知道我的路由器將做什麼。如有必要,我可以使用任何代碼的Web服務器,因爲我可以訪問永久Web空間。這就是我現在所擁有的。
服務器:
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或某些外部服務器?問題有點令人困惑,因爲您正在操作的管道的哪一側。 – roippi
我需要我的IP地址。 – SwiftCore
你是服務器嗎? – Noelkd