Розетка TCPServer в рубине - PullRequest
1 голос
/ 28 июня 2010

Я хотел бы установить соединение между двумя компьютерами, используя сокет. Для этого один из них - сервер, и вот код, который я написал:

sock= TCPServer.open('localhost', 6666)
sock.accept

клиент пытается установить соединение:

client = TCPSocket.open(ip_server, 6666)

но не работает. Я заметил сканирование портов сервера, что сервер не открывает порт в сеть, работает только в локальном режиме.

Любое предложение, спасибо заранее

Ответы [ 4 ]

3 голосов
/ 28 июня 2010

Я успешно использовал этот код.На стороне сервера:

serverSocket = TCPServer.new( "", port )
serverSocket.accept

и на клиенте

t = TCPSocket.new(server_ip, port.to_i)  

Однако недавно я начал использовать гем 'EventMachine' , который обрабатывал сокетыраз проще

1 голос
/ 14 сентября 2012

Уже говорилось, что служба работает в «Локальном режиме» с использованием обратной связи «localhost».

sock= TCPServer.open('localhost', 6666)
sock.accept

TCPServer - удобный интерфейс для базового дескриптора файла.Честно говоря, это почти делает программирование сокетов слишком простым.

Подобно тому, что уже было сказано, «localhost» является петлей к 127.0.0.1.Следовательно, ваше утверждение эквивалентно:

sock= TCPServer.open('127.0.0.1', 6666)
sock.accept

Если вы будете использовать сетевое подключение в локальной сети, предполагая, что серверу назначен IP-адрес 192.168.0.1, вы можете назначить локальный IP-адрес дляпрослушать:

sock= TCPServer.open('192.168.0.1', 6666)
sock.accept

Для открытого порта, предположительно открытого для всех, используйте:

sock= TCPServer.open(6666)
sock.accept

Помните, что все является файлом - соединение, которое вы устанавливаете, читает и пишетк одному и тому же файлу или серии файлов из двух (или более) мест.Важно контролировать, кто может иметь доступ к этим файлам и в какой степени.

0 голосов
/ 28 июня 2010

Он работает в «локальном режиме», потому что он прослушивает localhost, который является петлевым адресом для компьютера, на котором запущен сервер. IP-адрес вашего сервера должен быть адресом, который ваш компьютер имеет в локальной сети (что-то вроде 192.168.xx) .

0 голосов
/ 28 июня 2010

Да, и все в порядке, потому что вы сказали, что он должен связать порт сервера с интерфейсом 'localhost', а это 127.0.0.1 и связан с вашим интерфейсом обратной связи, а не с любым реальным интерфейсом, соединяющимся с реальным миром.

Вы должны попробовать

sock = TCPServer.new(6666)
sock.accept
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...