2013-02-07 1 views
0

Windows Mobile에 문제가 있습니다.Windows 7.x 모바일에서 UDP 수신

나는 Windows 응용 프로그램이 실행될 때, 나는 끔찍한 문제를 encoutering하고, (내게로 만든) 윈도우 서버 Aplication, 방송 데이터에서 UDP 데이터를 잡위한 코드를 작성 되었으나 :

유효하지 않은 인수가 제공되었습니다

소켓 ReceiveFromAsync() funciton이 작동 할 때.

아무도 도와 줄 수 있습니까?

은 ---이 내가 해결책을 발견 한 코드

public string Receive(int portNumber) 
     { 
      string response = "Operation Timeout"; 
      // We are receiving over an established socket connection 
      registerSocket(); 
      if (_socket != null) 
      { 
       // Create SocketAsyncEventArgs context object 
       SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
       socketEventArg.RemoteEndPoint = new IPEndPoint(IPAddress.Any, portNumber); 
       // Setup the buffer to receive the data 
       socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); 
       // Inline event handler for the Completed event. 
       // Note: This even handler was implemented inline in order to make this method self-contained. 
       socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e) 
       { 


        if (e.SocketError == SocketError.Success) 
        { 
         // Retrieve the data from the buffer 
    response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); 
         response = response.Trim('\0'); 
        } 
        else 
        { 
         response = e.SocketError.ToString(); 
        } 
        _clientDone.Set(); 
        _socket.ReceiveFromAsync(socketEventArg); 
       }); 
       // Sets the state of the event to nonsignaled, causing threads to block 
       _clientDone.Reset(); 

       // Make an asynchronous Receive request over the socket 
       **_socket.ReceiveFromAsync(socketEventArg);** // here the issue arises An  //invalid argument was supplied 
       // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds. 
       // If no response comes back within this time then proceed 
       _clientDone.WaitOne(TIMEOUT_MILLISECONDS); 
      } 
      else 
      { 
       response = "Socket is not initialized"; 
      } 
      return response; 
     } 
+0

아니, 아무도 당신을 도울 수 있습니다. –

+0

@lucian : 진심으로, 맞춤법이 틀린 "application", "function"및 "encountering"이 포함 된 수정을 제출하셨습니까? 또한, 누구든지 그 사실을 인정했습니다. –

+0

죄송합니다. 편집 요약에 명시된대로이 게시물을 편집 할 때만 서식을 개선했습니다. –

답변

0

입니다.

Udp 멀티 캐스트를 수신하려면 _socket.Bind(IPEndpoint)을 수신 한 다음 _socket.ReceiveFromAsync() 대신 _socket.ReceiveAsync()을 사용하고 수신해야합니다. 또한 socketEventArg.RemoteEndpoint은 비어 있어야합니다.

이 코드는 나를 위해 작동 : 함수 호출에 대한 코드 어디 모든 인수에서 온 같은 세부 사항을 제공하지 않는

 _socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 

     SocketAsyncEventArgs args = new SocketAsyncEventArgs(); 
     args.SetBuffer(new byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); 
     args.Completed += args_Completed; 

     _socket.Bind(new IPEndPoint(IPAddress.Any, **your port**)); 
     _socket.ReceiveAsync(args);