2009-04-05 9 views
0

원격 서버와 클라이언트를 구축했습니다. 서버가 같은 설정 :TCP를 통한 원격 연결

BinaryServerFormatterSinkProvider serverProv = 
    new BinaryServerFormatterSinkProvider(); 
serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
BinaryClientFormatterSinkProvider clientProv = 
    new BinaryClientFormatterSinkProvider(); 

IDictionary props = new Hashtable(); 
props["port"] = port; 

TcpChannel channel = new TcpChannel(props, clientProv, serverProv); 

ChannelServices.RegisterChannel(channel, false); 

RemotingConfiguration.RegisterWellKnownServiceType(typeof(Controller), 
    "Controller", WellKnownObjectMode.Singleton); 

클라이언트가 같은 설정 :

ChannelServices.RegisterChannel(new TcpChannel(0), false); 
m_Controller = (Controller)RemotingServices.Connect(typeof(Controller), 
     "tcp://" + ip + ":2594/Controller"); 

내가 로컬 호스트 '로 지정된 IP와 동일한 컴퓨터에서 서버에 연결을 시도, '잘 연결됩니다. 내가 서버의 IP 주소 부여가 아닌 LAN에 원격 컴퓨터에서 연결을 시도 할 때, 나는 오래 기다려야 후 클라이언트에 예외를 다음 수신 :

A connection attempt failed because the connected party did not properly 
respond after a period of time 

나는이 문제를 어떻게 해결할 수 있습니까? 포트가 서버에서 제대로 전달되고 방화벽이 활성화되어 있지 않기 때문에 구성 문제라고 확신합니다.

감사합니다.

+0

당신이 전에이 질문을했다 나타납니다 http://stackoverflow.com/questions/719425/remoting-objects-and-remote-connections 나는이 모든 것을 확인했습니다 –

답변

0

서버가 활성화되지 않은 것처럼 들립니다. localhost를 사용할 때 서버를 어떻게 시작 했습니까? 원격 IP 주소를 사용하여 동일한 작업을 수행 했습니까?

0

명령 프롬프트 (cmd.exe)에서 서버 쪽에서 netstat -a를 실행하고 LISTENING 행 만 봅니다. 로컬 주소가 127.0.0.1로 표시되는 경우는 서버 응용 프로그램은 수신 대기하는 의미

>netstat -a 
... 
Proto Local Address   Foreign Address  State 
TCP 0.0.0.0:135   Blah:0    LISTENING 
TCP 127.0.0.1:136   Blah:0    LISTENING 

: 서버가 로컬 주소 열에서 콜론 뒤에 숫자로 실행되는 포트를 보여주는 하나가 있어야합니다 루프백 어댑터. 이 어댑터는 로컬 시스템의 연결 만 자체 (따라서 이름)로 허용하므로 그러한 포트에 대한 원격 연결은 허용되지 않습니다. 'localhost'라는 이름은 127.0.0.1의 이름이므로, 어디서나 지정하면 설명이 될 수 있습니다. (위의 예제에서 136은 청취 루프백 소켓을 보여줍니다.)

로컬 주소가 0.0.0.0으로 표시되면 서버 응용 프로그램이 모든 어댑터에서 수신 대기한다는 것을 의미합니다. have) 원격 연결이 허용됩니다. (위의 예에서 135)

로컬 주소가 다른 IP 주소 인 경우 마지막으로 서버 응용 프로그램이 특정 네트워크 어댑터에서 수신 대기합니다. 어댑터가 여러 개인 경우 잘못된 어댑터를 청취 할 수 있습니다.

지금까지이 모든 것을 말하면서 게시 한 코드가있는 작은 애플리케이션 만 있고 기본값은 0.0.0.0 (모든 어댑터)에서 수신 대기하므로 다른 것을 본다면 놀랄 것입니다. 0.0.0.0이 표시되면 내 다음 번 호출 포트는 조직에있는 경우 클라이언트와 서버 (로컬 및 회사 모두)의 방화벽을 확인하는 것입니다.

원격 시스템에 대한 콘솔 액세스 권한이있는 경우 해당 포트의 로컬 시스템으로 telnet을 시도하여 실제로 연결을 수신하는지 확인할 수 있습니다. 또한 Netcat과 같은 간단한 TCP 리스너를 서버에서 대체하여 응용 프로그램이나 인프라 스트럭처에 문제가 있는지 확인할 수 있습니다.

+0

하고 그것을 잘 보인다. 클라이언트는 포트에서 텔넷 할 수 있습니다. 그것은 원격 구성 문제가 있어야하지만, 나는 그것을 보일 수없는 것. –

0

이 질문은 개월,하지만 아무도 덜 :

서버에 트래픽을 스니핑 (바람직하게는, 클라이언트뿐만 아니라에) 당신에게 무슨 일이 일어나고 있는지에 관해서는 더 통찰력을 제공해야합니다.

저는 Windows 용으로 매우 친숙한 패킷 스니퍼 인 Packetyzer을 권장합니다.