2014-10-19 3 views
0

저는 최근 루비 소켓을 배우기 시작했고 주제를 연구하기로 결정했습니다.다른 컴퓨터에서 내 localhost 서버에 연결하는 방법은 무엇입니까?

require 'socket' 

server = TCPServer.new 2000 # Server bound to port 2000 

loop do 
    client = server.accept # Wait for a client to connect 
    client.puts "Hello !" 
    client.puts "Time is #{Time.now}" 
    client.close 
end 

그리고 클라이언트에 대한 예제 코드 :

이 서버의 예제 코드는 다음과 같습니다 는 '소켓'

을 필요로 나는이 원활하게 실행 몇 가지 예제 코드를했다 루비 문서를 건너 왔어요
s = TCPSocket.new 'localhost', 2000 

while line = s.gets # Read lines from socket 
    puts line   # and print them 
end 

s.close    # close socket when done 

이렇게 잘 돌아 갔지만 다른 컴퓨터에서 실행중인 클라이언트를 연결하는 방법은 궁금합니다. 그래서 나는 클라이언트 코드에서 "localhost"를 public IP 주소로 대체하려고 시도했다. 그러나 다른 컴퓨터에서 새로운 클라이언트 코드를 실행하려고 시도했을 때 나는 단지 타임 아웃 오류가 발생했다. 심지어 서버를 실행하는 동일한 컴퓨터에서 새 클라이언트 코드를 실행하려고 시도했지만 여전히 시간 초과 오류가 발생했습니다. 누구나 제대로 작동하도록 어떻게 알 수 있습니까? 도움이 될 것입니다.

+2

임의의 외부 서비스가 제공하는 주소 대신 다른 컴퓨터의 * 내부 * IP 주소를 사용해보십시오. OS에 따라'ipconfig' 또는'ifconfig' 명령을 사용하여 무엇인지 확인하십시오. NAT 나 내부 연결에 외부 IP 주소를 사용할 수없는 곳의 뒤에있을 가능성이 큽니다. –

+0

@ GregHewgill, 고맙습니다. 그러나 "ECONNREFUSED"오류가 발생하기 때문에 서버를 호스팅하는 컴퓨터가 클라이언트를 차단하고있는 것으로 보입니다. – lakam99

+0

그건 올바른 방향으로 나아가는 단계입니다. 이는 서버가 실행되고 있지 않거나 서버의 일부 로컬 방화벽 소프트웨어가 들어오는 연결을 차단하고 있음을 의미합니다. –

답변

0

Greg Hewgill이 내게 도움이되었습니다. 첫 번째 문제는 잘못된 주소를 사용하고 있다는 것입니다. Greg는 "ipconfig"명령을 사용하여 실제 주소를 확인하도록 제안했습니다. 이 명령은 서버가 호스팅되고있는 실제 주소를 알려주었습니다. 이를 통해 클라이언트 코드에서 "localhost"를 변경하고 실제 IP 주소로 변경했습니다. 실행 중에 서버가 연결을 적극적으로 거부했다는 오류가 나타납니다. 이것은 서버 코드의 'localhost'를 서버 컴퓨터의 IP 주소로 변경함으로써 해결되었습니다. 그렉에 도움을 주셔서 감사합니다!

관련 문제