0
서버 Windows Form 응용 프로그램을 만들려고하지만 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
편집 : 콜백 방법 공공 하위 AcceptCallback (AR 된 IAsyncResult로) 소켓 = 아무것도으로 희미한 리스너
' 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 서버를 기반으로이 코드를 작성합니다. 이제 BeginAccept 메서드로 대신 시도하지만 CallBack에 오류가 발생합니다. EndAccept 메서드가 asyncResult를 반환하지 않습니다. –