2009-11-03 4 views
1

필자는 Windows 7을 실행하는 데스크톱에서 소프트웨어를 개발했으며 소프트웨어는 완벽하게 작동합니다. 이 소프트웨어는 Vista 랩톱에서도 잘 작동하는 것 같습니다. 그러나 XP에서 작동하는 데 몇 가지 문제가 있습니다.UDP Listener XP/Vista/Win7의 차이점은 무엇입니까?

소프트웨어는 포트 46787에서 UDP 브로드 캐스트 메시지를 전송하고이 포트에있는 장치의 응답을 수신하는 검색 도구로 시작합니다. 이것은 세 가지 OS 모두에서 작동합니다.

발견 된 장치를 선택하면 검색 UDP가 중지됩니다. 그런 다음 또 다른 UDP 클라이언트 장치에서 데이터를 수신하는 포트 46788에서 시작됩니다 : XP에

  receiverUDP = new UdpClient("255.255.255.255", 46788); 
      receiverUDP.EnableBroadcast = true; 

      // Start receiving Async UDP packets 
      receiverUDP.BeginReceive(new AsyncCallback(ReceiveUDP), receiverUDP); 

이이 EndReceive가 호출되는 System.Net.Sockets.SocketException를 throw하지만 비스타/Win7에와 완벽하게 작동 내 데이터를 스트리밍하면 ...

System.Net.Sockets.SocketException: The I/O operation has been aborted because of either a thread exit or an application request 
    at System.Net.Sockets.Socket.EndReceiveFrom(IAsyncResult asyncResult, EndPoint& endPoint) 
    at System.Net.Sockets.UdpClient.EndReceive(IAsyncResult asyncResult, IPEndPoint& remoteEP) 
    at Demo.IOPanel.ReceiveUDP(IAsyncResult result) in C:\...\IOPanel.cs:line 262 
    at System.Net.LazyAsyncResult.Complete(IntPtr userToken) 
    at System.Net.ContextAwareResult.CompleteCallback(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Net.ContextAwareResult.Complete(IntPtr userToken) 
    at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) 
    at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) 
    at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 

Windows 방화벽이 비활성화되어 있으며 다른 방화벽이 설치되어 있지 않습니다. 나는 netstat를 사용하여 검사했고 다른 어떤 것도 그 포트를 사용하고 있지 않습니다. Ive는 5 개의 임의의 포트를 시도했지만 여전히 작동하지 않습니다.

스택이 Vista 용으로 완전히 다시 작성된 것을 알고 있으므로 변경되었습니다. 이 모든 차이점을 숨기지 않아야합니까?

+0

모든 컴퓨터에서 동일한 .NET 버전이 필요합니까? – Niklas

+0

.Net 버전이 모두 동일한 지 확인 했습니까? – Samuel

+0

그들은 모두 가지고있는 것처럼 보입니다. 3.5 sp1 – Tim

답변

2

어떤 시점에서 BeginReceive을 호출하는 스레드가 종료 될 수 있습니까? 이것은 Vista에서는 작동하지만 XP에서는 작동하지 않습니다. 이 related question과 허용되는 답변에 대한 의견을 참조하십시오.

+0

그래, 스레드가 종료됩니다. 검색 도구는 BeginReceive에 스레드를 사용하지 않으므로 문제가되어야합니다! – Tim