2014-04-16 4 views
0

RMI 코딩을 배우려고하고 있는데 RMI의 서버 측을 실행하면 연결이 거부됩니다. 이것은 내가 단순히 코드를 실행 구현 된 인터페이스는 그대로 구현을위한 코드가 문제가되지 않는다고 생각 내 서버의 주요 방법localhost에서 RMI 연결이 거부되었습니다.

public static void main(String[] args)throws Exception { 
Implementation impl=new Implementation(); 
Naming.rebind("//localhost:2020/RMI", impl); 
System.out.println("Implementation has been bind to the name RMI and is ready for use"); 
    } 

입니다. 내가 얻는 예외는 이것입니다.

Exception in thread "main" java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused: connect 
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) 
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) 
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) 
    at sun.rmi.server.UnicastRef.newCall(Unknown Source) 
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 
    at java.rmi.Naming.rebind(Unknown Source) 
    at epl362Project.Server.main(Server.java:10) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) 
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) 
    ... 7 more 

내가 뭘 잘못하고 있니? 클라이언트 및 서버 측 모두 내 랩톱에서 실행됩니다. 이는 단지 운동 일뿐입니다. 뭔가 빠졌거나 내 코드에 문제가 있습니까? 제게 대답을 해주는 것 외에 제발 왜 그런지 설명해주세요. 단지 그것을 작동시키고 싶지 않기 때문에 배우려고 노력하고 있습니다.

** 편집 내 코드가 작동하지 않는 이유를 발견했습니다. 내가 말한 코드 라인이 누락되었습니다.

LocateRegistry.createRegistry(2020); 

이 질문은 stackoverflow에서 다른 질문에서 발견되었습니다. 그러나 RMI가 제대로 작동하기 위해이 코드가 필요한 이유에 대한 설명도 없었습니다. 누구든지 설명이 있습니까?

답변

2

Naming.rebind()의 대상은 RMI 레지스트리입니다. 그것은 실행되어야합니다. 그것은 달리고 있지 않았습니다. 그래서 당신은 그것에 연결할 수 없습니다. 따라서 ConnectException이 있습니다.

구현을위한 코드는 코드를 실행하는 구현 된 인터페이스이므로 중요하지 않습니다.

이것은 의미가 없으며 관련이 없습니다. 인터페이스는 '코드를 실행하지 않습니다'. 클래스의 메소드는 코드를 실행하며,이 경우 구현 클래스는 코드를 실행합니다. 그러나 귀하의 문제는 '코드 실행'이 아니라 레지스트리 연결에 있습니다.

+0

2020 년은 어떨까요? RMI가 실행되는 특정 포트 또는 네트워크 연결 또는 다른 포트입니까? (이것은 나에게 새로운 것입니다) 또는 내가 원하는 항구를 둘 수 있습니까? –

+1

복사 한 코드 샘플에서 누군가가 사용하기로 결정한 특정 포트입니다. 일반 레지스트리 포트는 1099입니다. – EJP

+0

코드를 복사하지 않았습니다. YouTube 튜토리얼을 보았습니다. P 도움을 준 사람 –

관련 문제