2012-07-31 5 views
2

들어오는 통신을 수신 대기하는 TcpListener를 사용하는 응용 프로그램을 유지 관리하고 있습니다. 내가 다른 컴퓨터에서 파일을 보낼 때, 나는 대상 컴퓨터에서 연결을 거부 했으므로 연결하지 못했습니다 "오류를 얻을 수 있다는 것입니다 데TcpListener가 연결을 적극적으로 거부했습니다.

Dim listener As TcpListener 
_listenFailed = False 
Try 
    listener = New TcpListener(System.Net.IPAddress.Parse(Me.Host), Me.Port) 
    listener.Start() 
Catch ex As Exception 
    ' an error here means the settings are likely bogus 
    _listenFailed = True 
    Return 
End Try 

While Not _stoplistening 
{ 
    ' Accept connection 
} 

문제 : 다음 코드는 연결을 엽니 다. "

방화벽 및 바이러스 백신을 확인했으며 차단이 없습니다. 사용 된 포트가 활성 상태인지 확인하기 위해

netstat -a -n 

을 사용했습니다. 두 응용 프로그램 모두 Visual Studio에서 관리자 모드로 실행 중이지만이 점이 차이를 만들어야합니다. 수락 연결 코드의 첫 번째 줄에 중단 점이 설정되어 있지만 결코 실행되지 않습니다.

나는 응용 프로그램을 중단하고 TcpListener를 검사하여 깊이 파고 들었다면 몇 가지 오류가 있음을 발견했습니다. TcpListener.LocalEndpoint.IPEndPoint.IPAddress.Address.ErrorCode에 오류 10045, "OperationNotSupported"가있었습니다. 또한 TcpListener.Socket.RemoteEndPoint.ErrorCode에서 1057 오류가 발생했습니다. "소켓이 연결되어 있지 않기 때문에 데이터를 보내거나받을 수있는 요청이 허용되지 않았으며 (sendto 호출을 사용하여 데이터 그램 소켓을 보낼 때) 주소가 제공되지 않았습니다. 이 두 가지 오류 중 어떤 것이 관련이 있는지 알 수는 없습니다.

이 문제의 원인에 대한 통찰력이 있거나 문제의 근원을 추적 할 수있는 단계가 있다면 감사 할 것입니다. .

+1

Me.Host의 가치는 무엇입니까? – nunespascal

+0

Me.Host에 IP 주소, 루프백 또는 워크 스테이션 이름이 있습니까? –

+0

컴퓨터의 IPv6 주소인지 확인했습니다. 유감스럽게도 회사 정책에 따라 실제 IP 게시가 금지됩니다. 죄송합니다. – Tim

답변

1

봅니다이 변화 : 여기에

listener = New TcpListener(System.Net.IPAddress.Parse(Me.Host), Me.Port) 

:

listener = New TcpListener(System.Net.IPAddress.Any, Me.Port) 

이렇게하면 모든 네트워크 인터페이스에서 수신 대기 할 수 있습니다. 대신 IPv6를 대상으로 지정할 경우


또한 IPv6Any 대신 Any를 사용할 수 있습니다. 이 선택은 클라이언트 측에서 사용하는 주소에 분명히 영향을 미칩니다.

+0

나는 왜 그것이 그것을 해결했는지 확신 할 수 없다. 이전에 정확하게 일치하는 IP 주소가 있습니다. 도와 줘서 고마워! – Tim

+0

@Tim 명령 줄에서 'ipconfig'를 수행하면 서버에 노출 된 모든 다른 네트워크 인터페이스가 표시됩니다. 일반적으로 모든 것을 청취해야합니다. 고유 한 IP 주소를 지정하면 자신을 그 IP 주소로 제한합니다. – tcarvin

관련 문제