急!用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)
中间两句‘是调试中忘记删掉的 请无视
然后附上设计图 --------------------编程问答-------------------- 百分了。。有没有人看下啊 --------------------编程问答-------------------- 你这个需要用多线程处理,不然卡死是必然的 --------------------编程问答--------------------
尝试使用了多线程可是还是失败了。。可能我做的有问题。。不太懂要怎么做 --------------------编程问答-------------------- 或者有没有不用多线程能实现的办法 --------------------编程问答-------------------- 可以用异步回调,实质也是多线程 --------------------编程问答--------------------
不太懂 能说的具体些么 谢谢了 --------------------编程问答-------------------- 同步通讯,接收消息时,如果没有消息返回,则会一直等待,应该是卡在这个位置 s.Receive(bytes)
建议将UDP监听放在子线程里面 或者采用异步通讯的方式.
补充:.NET技术 , VB.NET