Найти - Пользователи
Полная версия: Вопрос по socket
Начало » Network » Вопрос по socket
1
Megaman63
Столкнулся с такой проблемой. При домашнем сервере данный код отлично работает, сервер получает сообщения и на них отвечает. При удаленном сервере уже не работает. Сервер получает сообщения и отвечает, но до клиента они уже не доходят. Если отправлять сообщения не через сокет Игрока, а через тот же слушающий сокет (последнюю строчку меняем на UDPSock.sendto(w.data,p.addr)) - все получается на ура. в чем проблема, подскажите. И еще вопрос в догонку. Сколько сообщений в секунду может обработать сокет? имеет ли смысл слушать несколько портов (делать несколько входящих сокетов) или несколько исходящих сокетов? или все можно повесить на слушающий и отвечающий сокет? Кол-во сообщений ожидается большое - порядка 1000-5000 тысяч в секундну


UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

ip = ‘192.168.0.7’
port = 3030
listen_addr = (ip,port)
UDPSock.bind(listen_addr)

class Player:
def __init__(self, addr):
self.addr = addr
self.UDPSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while 1:
data,addr = UDPSock.recvfrom(1024)

message = MessageReader(data)
messageId = message.readInt()


if messageId == 10:
arrayOfPlayers.append(Player(addr))
print('new player {}'.format(addr))
if messageId == 11:
text = message.readString()
num = message.readInt()

w = MessageWriter()
w.writeInt(11)
w.writeInt(1234567)
for p in arrayOfPlayers:
if p.addr == addr:
p.UDPSock.sendto(w.data,p.addr)
noob_saibot
У вас, возможно, нат симметричный, ответ вы получите только с ip:port на который отправляли. В локалке, все будет ходит нормально.
Megaman63
noob_saibot
У вас, возможно, нат симметричный, ответ вы получите только с ip:port на который отправляли. В локалке, все будет ходит нормально.
а как можно узнать свой НАТ на домашнем компьютере? Я поставил переадресацию на роутере , чтобы внешние порты ссылались на нужный мне внутренний порт. У меня получалось ранее отправить пакеты со смартфона (3G), на домашний компьютер , я узнавал их внешние адресы , при помощи сервера со статическим IP , и все работало.
noob_saibot
Megaman63
а как можно узнать свой НАТ на домашнем компьютере?
Запрос к stun серверу, он возвращает, тип ната, порт и ip.

Проверьте wireshark'ом, что все уходит с сервера.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB