要讓兩台主機通過外網進行Socket通信,需要在網絡設定和代碼實作兩個方面進行相應的配置。下面是具體的步驟:
确認網絡環境:首先要確定兩台主機都能夠通過外網通路。可以通過ping指令或者telnet指令來測試兩台主機之間是否可以互相通路。
确定外網IP位址:為了使兩台主機能夠互相通路,需要知道它們在外網中的IP位址。可以通過百度、谷歌等搜尋引擎搜尋"我的IP",擷取本機在外網中的IP位址。對于伺服器端,如果它有一個域名,可以通過ping指令擷取到域名解析出來的IP位址。
端口映射:如果兩台主機在同一内網中,需要将本地端口映射到公網IP上,使得外網可以通路到内網主機的服務。可以在路由器中進行端口映射設定,将路由器的公網IP位址和端口映射到内網中的某台主機的IP位址和端口。
編寫Python Socket程式:編寫伺服器端和用戶端程式,使用公網IP位址和端口号進行連接配接。在代碼中需要使用socket.bind()函數綁定伺服器的IP位址和端口号,以及使用socket.connect()函數連接配接用戶端的IP位址和端口号。
以下是一個簡單的Python Socket程式示例:
伺服器端代碼:
import socket
HOST = '0.0.0.0' # 監聽所有位址
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
conn.close()
用戶端代碼:
import socket
HOST = '伺服器公網IP位址'
PORT = 8888
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))