2012-04-23 3 views
1

Предположим, у меня есть следующий фрагмент кода.Как узнать номер порта TCP-соединения

server = TCPServer.new(3200) 
client = server.accept() 

Как узнать, какой номер порта, который клиент отправил своему сообщению, является? Я пробовал как client.peeraddr, так и client.addr, и оба они не дают мне надлежащего номера порта.

ответ

1

Порт, к которому подключаются клиенты, составляет 3200. И порт на стороне клиента, где создается соединение, является случайным для каждого подключения, заданного ОС из неиспользуемых портов.

1

client.peeraddr дает массив, соответствующий struct addrinfo. Для AF_INET, это выглядит примерно так:

["AF_INET", 48942, "127.0.0.1", "127.0.0.1"] 

Вы можете создать Addrinfo объект от него и получить порт, как так:

require 'socket' 
server = TCPServer.new(3200) 
client = server.accept() 
addr = Addrinfo.new(client.peeraddr) 
port = addr.ip_port 
Смежные вопросы