Imports System.Net
Imports System.Threading
Imports System.Text
Imports System.Net.Sockets
Module Module1
Dim PortNumber As Integer = 1984 '侦听端口号 google_protectAndRun("ads_core.google_render_ad",google_handleError,google_render_ad);
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,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