到客户端之前的UDP数据包(已删除?)

时间:2019-07-24 01:06:44

标签: vb.net udp

因此,我创建了一个UDP服务器/客户端聊天程序。显然,从客户端向服务器发送数据是可以的。但是,只有当我使用专用IP来设置服务器时,才能从服务器向客户端发送数据。如果我使用公共IP,则无法再从服务器向客户端发送数据。最奇怪的是,昨天我使用了我的公共IP并成功了。但是现在没有。

客户端

Dim publisher As New Sockets.UdpClient()
Dim serverEP As IPEndPoint

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    serverEP = New IPEndPoint(IPAddress.Parse(TBTo.Text), TBPort.Text)
    publisher.Connect(serverEP)
    publisher.Client.Blocking = False
    Me.Text = serverEP.ToString
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim sendbytes() As Byte = ASCII.GetBytes("Hi Server")
    publisher.Send(sendbytes, sendbytes.Length)
   Try
        Dim rcvbytes() As Byte = publisher.Receive(serverEP)
        Dim rcvedData As String = ASCII.GetString(rcvbytes)
        'Dim rcvdata = publisher.Receive(serverEP)
        Me.Text = rcvedData
    Catch ex As Exception

    End Try
End Sub

服务器端

Dim subscriber As UdpClient = New UdpClient(5823)
Dim clientEP As IPEndPoint


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sendbytes() As Byte = ASCII.GetBytes("Hi Client")
    subscriber.Send(sendbytes, sendbytes.Length, clientEP)
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    subscriber.Client.ReceiveTimeout = 100
    subscriber.Client.Blocking = False
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 5823)
    Try
        Dim rcvbytes() As Byte = subscriber.Receive(ep)
        TBRcv.Text = ASCII.GetString(rcvbytes)
        clientEP = ep
    Catch ex As Exception
    End Try
End Sub

我希望服务器将数据以公共IP发送给客户端。我试图使服务器将数据连续发送到客户端,并在客户端上创建了一个按钮以将数据转换为字符串,但它使我犯了这个错误:System.Net.Sockets.SocketException:'非阻塞套接字操作可以不能立即完成”

0 个答案:

没有答案