2011-04-19 7 views
0

두 대의 컴퓨터간에 C#으로 작동하는 간단한 서버/클라이언트 소켓 응용 프로그램을 가져 오는 데 문제가 있습니다. 아이디어가 부족해지기 시작했습니다. 두 컴퓨터에서 Windows XP를 실행 중이며 exe뿐만 아니라 연결을 시도하는 포트에 대한 방화벽 예외가 추가되었습니다. 이상한 부분은 클라이언트와 서버가 하나의 시스템에서 완벽하게 작동한다는 것입니다.PC간에 소켓을 연결하는 데 문제가 있습니다.

서버 코드 :

IPAddress ipAddress; 
IPAddress.TryParse("127.0.0.1", out ipAddress); 

IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 51000); 
_ListenerSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.IP); 
try 
{ 
    _ListenerSocket.Bind(localEndPoint); 
    _ListenerSocket.Listen(1000); 

    while (_Running) 
    { 
     _ListenerSync.Reset(); 
     _ListenerSocket.BeginAccept(new AsyncCallback(AcceptCallback), _ListenerSocket); 
     _ListenerSync.WaitOne(); 
    } 

    _ListenerSocket.Shutdown(SocketShutdown.Both); 
    _ListenerSocket.Close(); 
} 

클라이언트 코드 :

tTarget = new Socket(_IP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
tTarget.Connect(_IP, 51000); 

AcceptCallback가 호출되고 있지 않습니다. 그래서 뭔가 그 트리거 전에 연결을 거부하고 있습니다. 이 클라이언트/서버 설정은 단일 컴퓨터의 내부 연결 (동일한 컴퓨터에서 클라이언트와 서버를 모두 실행)에서 작동하지만 로컬 네트워크에서 두 대의 컴퓨터를 함께 연결하려고하면 실패합니다. 나는 패킷이 클라이언트되고, 106 도착 확인하기 위해 두 시스템에 와이어 샤크를 설치 한 101 서버 인

No connection could be made because the target machine actively refused it 

:

예외는 tTarget.Connect() 호출에 발생되는 .

262 24.724892 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 
263 24.724922 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 
270 25.144866 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 
271 25.144887 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 
288 25.647842 192.168.0.106 192.168.0.101 TCP brlp-2 > 51000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 
289 25.647874 192.168.0.101 192.168.0.106 TCP 51000 > brlp-2 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0 

참고 : 이것은 예외가 throw되기 전에 포트 51000에서 모두 네트워크 통신입니다.

아무 것도 차단되지 않은 것으로 보이며 단일 컴퓨터에서 작동하기 때문에 원격 PC의 연결을 허용하지 않는 소켓의 설정 일 수 있습니다. 어떤 조언을 주시면 감사하겠습니다. 고맙습니다.

답변

3

0.0.0.0 주소로 바인딩합니다. 이것은 "모든 로컬 주소, 그것이 무엇이든"을 의미합니다.

로컬 주소를 하드 코딩하는 것은 좋지 않은 생각입니다. 구성 가능하게하는 것이 더 좋지만 일부 로컬 주소에서는 수신 만 허용하고 다른 주소에서는 수신 할 수 없도록 명시 적으로 허용하려는 경우에만 필요합니다. 엔터프라이즈 급 서버 소프트웨어의 경우이 요구 사항이 필요합니다 (다중 홈 서버 시나리오 등).

3

localhost 주소 127.0.0.1이 아닌 서버 시스템의 IP 주소를 사용하십시오.

관련 문제