2016-10-05 8 views
0

サーバーのWindowsフォームアプリケーションを作成しようとしていますが、Listenメソッドを呼び出すときにコードが0x80004005エラーをスローします。 私は間違っていますか?このコードをUDPポートでリッスンさせるには、何を変更する必要がありますか?

Private Sub StartUdpReceiveThread(ByVal Puerto As Integer) 
    If Not UdpOpen Then 
     Try 
      permission = New SocketPermission(NetworkAccess.Accept, TransportType.Udp, "", SocketPermission.AllPorts) 

      sListener = Nothing 

      permission.Demand() 

      'Dim ipHost As IPHostEntry = Dns.GetHostEntry("") 

      Dim ipAddr As IPAddress = IPAddress.Any 

      ipEndPoint = New IPEndPoint(ipAddr, CInt(Me.PuertoEscuchaLbl.Text)) 

      'sListener = New Socket(ipAddr.AddressFamily, SocketType.Unknown, ProtocolType.Udp) 
      sListener = New Socket(ipAddr.AddressFamily, SocketType.Dgram, ProtocolType.UDP) 

      ' Associates a Socket with a local endpoint 
      sListener.Bind(ipEndPoint) 

      sListener.Listen(5) 

      ' Begins an asynchronous operation to accept an attempt 
      Dim aCallback As New AsyncCallback(AddressOf AcceptCallback) 
      sListener.BeginAccept(aCallback, sListener) 

      PrintLog("Server listening on " & ipEndPoint.Address.ToString & " port: " & ipEndPoint.Port) 

      UdpOpen = True 
     Catch ex As Exception 
      MessageBox.Show(ex.ToString()) 
     End Try 
    End If 
End Sub 

編集: コールバックメソッド ます。Public Sub AcceptCallback(たIAsyncResultとしてAR) 薄暗いリスナーソケット=何も

' A new Socket to handle remote host communication 
    Dim handler As Socket = Nothing 
    Try 
     ' Receiving byte array 
     Dim buffer As Byte() = New Byte(1023) {} 
     ' Get Listening Socket object 
     listener = DirectCast(ar.AsyncState, Socket)'<-- Here raises an error 
     ' Create a new socket 
     handler = listener.EndAccept(ar) 

     handler.NoDelay = False 

     ' Creates one object array for passing data 
     Dim obj As Object() = New Object(1) {} 
     obj(0) = buffer 
     obj(1) = handler 

     handler.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf ReceiveCallback), obj) 

     ' Begins an asynchronous operation to accept an attempt 
     Dim aCallback As New AsyncCallback(AddressOf AcceptCallback) 
     listener.BeginAccept(aCallback, listener) 
    Catch ex As Exception 
     MessageBox.Show(ex.ToString()) 
    End Try 
End Sub 

答えて

0

としてだけIPHostEntry.AddressListの最初のIPアドレスを選ぶが、配列を検索しませんIPv4アドレスの場合this MSDN pageの例を参照してください。

+0

ipAddr変数を定義する行をDim ipAddrに変更します。IPAddress = System.Net.IPAddress.Parse( "127.0.0.1")と思われますが、TCPポートを開き、UDPポートが必要です。 :( –

+0

'SocketType.Dgram'と' ProtocolType.UDP'を使用していても? – rveerd

+0

ありがとう!リッスンメソッドを呼び出すまで動作しているようだが、ListenメソッドがUDPに利用できないのでエラーが発生する。いくつかはインターネット上にあり、UDPのリッスンモードにソケットを置くプロセスのようですが、私はこのコードをTCPサーバーに基づいて作成しますが、今はBeginAcceptメソッドを使用していますが、CallBackではエラーが発生します。 EndAcceptメソッドはasyncResultを返しません。 –

関連する問題