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
ipAddr変数を定義する行をDim ipAddrに変更します。IPAddress = System.Net.IPAddress.Parse( "127.0.0.1")と思われますが、TCPポートを開き、UDPポートが必要です。 :( –
'SocketType.Dgram'と' ProtocolType.UDP'を使用していても? – rveerd
ありがとう!リッスンメソッドを呼び出すまで動作しているようだが、ListenメソッドがUDPに利用できないのでエラーが発生する。いくつかはインターネット上にあり、UDPのリッスンモードにソケットを置くプロセスのようですが、私はこのコードをTCPサーバーに基づいて作成しますが、今はBeginAcceptメソッドを使用していますが、CallBackではエラーが発生します。 EndAcceptメソッドはasyncResultを返しません。 –