0
Я пытаюсь создать приложение Windows Form для сервера, но мой код вызывает ошибку 0x80004005 при вызове метода Listen. Что я делаю неправильно?Что я должен изменить, чтобы этот код прослушивал порт 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
Edit: метод CallBack Public Sub AcceptCallback (ар Как IAsyncResult) Dim слушателем Как Гнездо = Ничего
' 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 и не вызвал ошибку, потому что метод Listen недоступен для UDP. некоторые в Интернете и похоже, что процесс поместить сокет в режим прослушивания для UDP отличается от TCP, я делаю этот код на основе TCP-сервера. Теперь я пытаюсь использовать метод BeginAccept, но в CallBack возникает ошибка, потому что Метод EndAccept не возвращает asyncResult. –