C# UdpClient
클래스를 사용하여 UDP 네트워킹을 사용하고 있습니다. 하나의 UdpClient
오브젝트가 고정 로컬 포트에 바인드되지만, 다른 엔드 포인트와주고받을 수 있어야하므로 원격 엔드 포인트에는 바인드되지 않습니다.잘못된 스레드에서 SocketException이 발생했습니다.
두 개의 스레드가 있습니다. 하나는 송신 용이고 하나는 수신 용입니다. 이제 존재하는 끝점에 데이터를 보내지 만 해당 포트에서 수신 대기하지 않으면 SocketException
이 필요합니다. 그리고 나는 하나를 얻는다. 불행히도 예외를 반환하는 것은 내 Send
호출이 아니지만 Receive
호출입니다. 그래서 내 보내는 스레드에서 데이터를 "유효하지 않은"끝점에 보내고받는 스레드가 예외를 가져옵니다. 불행히도, 그 시점에서, 나는 끝 점이 예외를 발생시키는 원인을 전혀 모릅니다.
보내기 전에 끝점을 저장하면받는 스레드에서 해당 끝점에 액세스하는 것은 대기 상태의 경쟁 조건 오류 일뿐입니다.
불행히도 SocketException
은 오류를 발생시킨 끝점을 제공하지 않습니다.
아이디어가 있으십니까? 어떻게 든 예외를 보내는 스레드에서 throw 할 수 있습니까?
도움을 주시면 대단히 감사하겠습니다.
UDP가 작동하는 방식 때문에 설계 상 다소 차이가 있다고 생각합니다. 그것이 데이터를 송신 할 수 있다고 가정하면, 즉 정확하게 초기화된다.나는 UDP가 어떤 에러 검사도하지 않기 때문에 이것을 믿는다. 그것은 단순한 보냄과 잊어 버림. –
Receive() 호출을 죽이지 않으면 살 수 있습니다. 여하튼, 이것은 꽤 비논리적 인 것처럼 보인다. –
문서에 더 가까운 독자라면 다른 것일 수도 있습니다. 당신을 더 잘 돕기 위해 SocketException과 SocketException.ErrorCode를 게시 할 수 있습니까? –