VB实现UDP通信例程(.net VS2005)源码
Imports System.Threading
Imports System.Text
Imports System.Net.Sockets
Module Module1
Dim PortNumber As Integer =
1984
'侦听端口号
Dim Cmd
As String =
"Chat:"
'提示符
Dim
listener As
Socket
'侦听socket
Dim
tListener As
Thread
'侦听线程
Dim
Prompted As Boolean =
False
'用于线程间同步的标志变量
Sub Main()
Welcome()
'欢迎信息
StartListener()
'开始侦听
StartChatting()
'准备好让用户发送消息
End
Sub
Private Sub Welcome()
Dim txtMessage As String = vbCrLf & "Welcome! I am a console
application for LAN chatting." & vbCrLf
Console.WriteLine(txtMessage)
End
Sub
Private Sub StartListener()
Dim ready As Boolean = False
Dim LocalPoint As IPEndPoint
Dim msg As String
While Not ready
'向用户询问侦听端口号。用户可以直接回车,表示选择默认的。
msg = GetParams("===Now, enter the local port you want to listen("
& PortNumber & "):")
If msg = "" Then msg = PortNumber
Try
PortNumber = Int(msg)
LocalPoint = New
IPEndPoint(Dns.GetHostByName(Dns.GetHostName).AddressList(0),
PortNumber)
listener = New Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp)
listener.Bind(LocalPoint)
ready = True
Catch ex As Exception
Console.WriteLine("※※※ERROR※※※ " & vbCrLf &
ex.Message & vbCrLf)
End Try
End While
tListener = New Thread(AddressOf thrListener)
tListener.Start()
End
Sub
Private Sub StartChatting()
Dim RemoteHost As String = Dns.GetHostName
Dim RemotePort As Integer = 1984
Dim RemotePoint As IPEndPoint
Dim ready As Boolean = False
Dim msg As String
While Not ready
'向用户询问发送消息的目标主机和端口。用户可以直接回车,表示选择默认的。
msg = GetParams("---enter the name of the one you want to chat
with(" & RemoteHost & "):")
If Not msg = "" Then RemoteHost = msg
msg = GetParams("---enter the port number that guy listening at("
& RemotePort & "):")
If msg = "" Then msg = RemotePort
Try
RemotePort = Int(msg)
RemotePoint = New
IPEndPoint(Dns.GetHostByName(RemoteHost).AddressList(0),
RemotePort)
ready = True
Catch ex As Exception
Console.WriteLine("※※※ERROR※※※ " & vbCrLf &
ex.Message & vbCrLf)
End Try
End While
Console.WriteLine()
Console.WriteLine("OK, now you can chat. Type ""help"" to find out
what you can do.")
Console.WriteLine()
Dim sender As New UdpClient
Dim Message As String = Prompt()
While
True
'用户现在可以开始发送消息
Prompted = False
Select Case Message.ToLower
Case "exit"
Exit While
Case "help"
ShowHelp()
Case Else
Dim ByArr As Byte() = Encoding.Unicode.GetBytes(Message)
sender.Send(ByArr, ByArr.Length,
RemotePoint) '发出消息
End Select
Message = Prompt()
End While
tListener.Abort()
End
End
Sub
Private Function GetParams(ByVal Msg As String) As String
Console.Write(Msg)
Return Console.ReadLine
End
Function
Private Function Prompt() As String
If Not Prompted Then
Console.Write(Cmd)
Prompted = True
End If
Return Console.ReadLine
End
Function
Private Sub thrListener() '侦听线程
Dim bytes(4096) As Byte
Dim NumGet As Integer
Dim Msg As String
While True
Debug.WriteLine("Waiting for a message...")
NumGet =
listener.Receive(bytes)
'接收
Prompted = False
Msg = Encoding.Unicode.GetString(bytes, 0, NumGet)
'与发送消息一样使用unicode编码
Console.WriteLine(vbCrLf &
">>>>>>>>>" & Msg &
vbCrLf)
If Not Prompted Then
Console.Write(Cmd)
Prompted = True
End If
End While
End
Sub
Private Sub ShowHelp()
Console.WriteLine("")
Console.WriteLine("========================================================================")
Console.WriteLine("This program is very simple, you can type
""exit"" to exit program.")
Console.WriteLine("========================================================================")
Console.WriteLine("")
End
Sub
End Module
加载中,请稍候......