当前位置:编程学习 > C#/ASP.NET >>

急!用VB.net做UDP点对点聊天接收时总是卡死

用UDP做点对点聊天时遇到的问题 点Button2开始接收消息的时候就会卡死 消息是能够接收到

Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.Text

Public Class Form1
    Private Sub ss1()
        Try
            Dim bytes(1024) As Byte
            Dim s = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
            Dim remoteEndPoint As New IPEndPoint(IPAddress.Parse("172.16.2.24"), 8080)
            s.Connect(remoteEndPoint)
            s.Send(Encoding.ASCII.GetBytes(TextBox1.Text))
            'Dim MySendBytes() As Byte = Encoding.ASCII.GetBytes(TextBox1.Text)
            's.SendTo(MySendBytes, RemoteEndPoint)
            s.Close()
        Catch ex As Exception
        End Try
    End Sub

    Private Sub ss2()
        Dim s As Socket = Nothing
        Try
            s = New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
            Dim localendpoint As New IPEndPoint(IPAddress.Parse("172.16.2.24"), 1000)
            s.Bind(localendpoint)
            While (True)
                System.Windows.Forms.Application.DoEvents()
                Dim bytes(1024) As Byte
                s.Receive(bytes)
                ListBox1.Items.Insert(0, Encoding.ASCII.GetString(bytes))
            End While
        Catch ex As Exception
        End Try
    End Sub

    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ss1()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ss2()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub


    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

    End Sub
End Class
--------------------编程问答--------------------  'Dim MySendBytes() As Byte = Encoding.ASCII.GetBytes(TextBox1.Text)
 's.SendTo(MySendBytes, RemoteEndPoint)
中间两句‘是调试中忘记删掉的 请无视
然后附上设计图 --------------------编程问答-------------------- 百分了。。有没有人看下啊 --------------------编程问答-------------------- 你这个需要用多线程处理,不然卡死是必然的 --------------------编程问答--------------------
引用 3 楼 qdu123 的回复:
你这个需要用多线程处理,不然卡死是必然的

尝试使用了多线程可是还是失败了。。可能我做的有问题。。不太懂要怎么做 --------------------编程问答-------------------- 或者有没有不用多线程能实现的办法 --------------------编程问答-------------------- 可以用异步回调,实质也是多线程 --------------------编程问答--------------------
引用 6 楼 wxl1010 的回复:
可以用异步回调,实质也是多线程

不太懂 能说的具体些么 谢谢了 --------------------编程问答-------------------- 同步通讯,接收消息时,如果没有消息返回,则会一直等待,应该是卡在这个位置 s.Receive(bytes)
建议将UDP监听放在子线程里面 或者采用异步通讯的方式.
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,