Последние пару дней я провел, пытаясь понять, как отправлять данные туда и обратно по UDP (у меня есть планы на простую многопользовательскую игру). Пока все хорошо, пока я не понял, что он отлично работает только через локальную сеть, но ни один из пакетов никогда не приходит через Интернет. Если я запускаю тестовый сервер и тестовый скрипт (код ниже) на одном компьютере и отправляю данные по локальной сети, они поступают нормально (Wireshark выдает ошибку «Порт недоступен» при отправке через Интернет). Когда у меня есть клиент и сервер на разных компьютерах, я могу отправлять данные через Интернет и локальную сеть, но ничего не приходит к месту назначения. Я часами гуглил, убеждался, что порты переадресованы, возился с настройками, дважды и трижды проверял код, проверял с помощью Wireshark, тестировал с другими людьми, ничего.
Что я делаю неправильно?
Вот мой тестовый код:
import socket, pickle
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.setblocking(0)
port = 5000
type = raw_input("1=Server 2=Client 3=Local Client: ")
if type == "1":
ip = ""
sock.bind((ip,port))
print("Socket: "+str(sock.getsockname()))
while True:
try:
rdata, addr = sock.recvfrom(1024)
data = pickle.loads(rdata)
print addr, ">>>", data
except:
pass
elif type == "2":
ip = "79.222.132.25"
sock.bind(("192.168.2.102",port+1))
sock.connect((ip,port))
print("Socket: "+str(sock.getsockname()))
print("Connected to: "+str(sock.getpeername()))
while True:
input = raw_input("Send:")
data = pickle.dumps((input))
sock.send(data)
else:
ip = "192.168.2.102"
sock.bind((ip,port+1))
while True:
input = raw_input("Send:")
data = pickle.dumps((input))
sock.sendto(data,(ip,port))
Спасибо за помощь заранее.