이렇게 대답 해 주시면 사과드립니다. 나는 보았지만 찾지 못했습니다. 제 상황은 고객이 로컬 네트워크에 연결하거나 Verizon 모뎀을 통해 원격으로 들어 와서 TCP 서버에 연결할 수 있다는 것입니다. (.NET 3.5 - C#을 사용 중입니다.)Socket.Connect 오류 및 오류 catch 할 수 없습니다.
그 중 하나에서 연결하면 문제가 없습니다. 하지만 내가 실수로 "잘못된"네트워크 (예 : 스타 벅스에 있고 무선 네트워크에 로그온 한 경우. 버라이즌 카드를 사용하고 있다고 생각하기 때문에 로그인하려고 시도합니다.)에서 서버가 연결. 벌금. 하지만 내 Try/Catch는 아무 것도 잡아 내지 못합니다 ... 스레드 풀을 통해 호출하는 경우 루틴을 종료하거나 직접 호출하면 중단됩니다. 여기
코드입니다 (이것은에 실패 m_clientSocket.Connect (IPEND)) :이은에라고tcpConnectionObject passObject = new tcpConnectionObject(serverIP, serverPORT);
ThreadPool.QueueUserWorkItem(new WaitCallback(SRVR_CONNECT.connectToTCP), passObject);
:
tcpConnectionObject passedTCPObject = (tcpConnectionObject) obj;
if (checkNetStat(passedTCPObject) == false)
{
updateStatus(false);
return;
}
try
{
m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(passedTCPObject.ipString);
int iPortNo = System.Convert.ToInt16(passedTCPObject.portString);
IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo);
m_clientSocket.Connect(ipEnd);
if (m_clientSocket.Connected)
{
updateStatus(true);
//Wait for data asynchronously
WaitForData();
}
}
catch (SocketException e)
{
updateStatus(false);
return;
}
catch (Exception e)
{
updateStatus(false);
return;
}
updateStatus(true);
return ;
내가 스레드를 사용하여의 WinForm에서이 전화 양식의 SHOW() 메소드. 내가 이런 식으로 할 때, 내 양식을 보여 주지만 상태가 변경되지 않습니다 (어떤 결과가 있어야합니다) 내가 그것에 디버거를 넣고 실행을 단계별로 시작, 나는 Socket.Connect() 디버거가 단순히 mthod를 종료하면 내 양식이 표시됩니다. 나는 결코 내 어획량에 타격하지 않았다.
소켓에서 생성 할 수있는 모든 오류를 시도했지만 아무 것도 잡아 내지 못했습니다. 디버거를 실행하면 해당 행에 도달하자마자 내 메서드가 종료되지만 catch 가능 오류는 없습니다.
당신이 당신이없이 백그라운드 스레드를 종료하는 것이 htink 왜 질문을 직접 호출하는 경우 교수형을 바탕으로 공고. 백그라운드 스레드도 걸려 있다고 가정합니다. – JaredPar
디버거가 예외가 발생했을 때 중지되도록 설정 했습니까? –
@IgbyLargeman이 내가 생각한 것을 확인하도록 제안했습니다. 단계별로 진행하면 예외가 적용되지 않습니까? – MStodd