我開始研究一個簡單的服務器和客戶端腳本。我測試了我的本地網絡上的腳本,它運行得很好:服務器將打開,並等待客戶端連接。一旦客戶連接,它就會讓我繼續。無法爲簡單的Python服務器端口
然後我決定通過互聯網測試它,這是問題開始發生。我在Ubuntu上運行服務器,在Windows機器上運行客戶端。
服務器連接代碼:
import socket
import sys
#Create a socket for connection
def socket_create():
try:
global host
global port
global s
host = ''
port = 5698
s = socket.socket()
print("Socket created.")
except socket.error as msg:
print("Socket creation error: " + str(msg))
#Bind the created socket to a port, sleep for conn
def socket_bind():
try:
global host
global port
global s
s.bind((host, port))
print("Waiting for connection")
s.listen(5)
except socket.error as msg:
print("SOcket binding error: " + str(msg) + "\n Retrying...")
socket_bind()
#Estabilish Connection with client
def socket_accept():
conn, adress = s.accept()
print("Connection has been estabilished | " + "IP " + adress[0] + " | Port " + str(adress[1]))
send_command(conn)
conn.close()
客戶端連接代碼:
import os
import socket
import subprocess
# Create a socket
def socket_create():
try:
global host
global port
global s
host = 'My Internet IP'
port = 5987
s = socket.socket()
except socket.error as msg:
print("Socket creation error: " + str(msg))
# Connect to a remote socket
def socket_connect():
try:
global host
global port
global s
s.connect((host, port))
except socket.error as msg:
print("Socket connection error: " + str(msg))
和錯誤:
[Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
我永遠也不會得到 「連接已estabilished」 打印從服務器,我會得到該錯誤。
任何人都可以看到任何可能導致代碼中的問題?
端口轉發路由器後,我必須在Ubuntu本身做任何其他配置嗎?我應該打開的端口是TCP,對吧?
打開路由器上的端口後,如果我使用像「http://www.canyouseeme.org/」這樣的服務,它會立即顯示該端口是打開的,還是隻顯示如果我正在運行服務器並等待連接?
你應該用你找到的解決方案回答你自己的問題。其他人可能遇到同樣的問題。 – Malt
@Malt我用修正的小說明更新了這個問題。我會適當地回答一個關於如何使用Port Mapper的小教程,一旦我有時間。 – Milan