一个 TCP/IP 聊天程序






4.47/5 (45投票s)
一个使用 Microsoft Visual Basic .NET 编写的 TCP/IP 聊天程序。
引言
有一段时间,我一直在寻找一个使用 VB.NET 开发的聊天程序解决方案,但没有找到太多,所以我决定自己尝试。 本文的目的是解释如何使用 TCP/IP Sockets 和 .NET framework 2.0 及更高版本中包含的 My.Settings
类。 这个应用程序的好处是,服务器和客户端不是两个单独的应用程序。 这个窗体同时充当服务器和客户端。
开始之前
我偶然发现了 *UnoLibs.Net.dll*,而不是创建我自己的文件传输功能。 这个类的优点是所有工作都为您完成。 在本文的后面,我将解释如何将此代码付诸实践。
要获得此类的副本,请单击此处。
应用程序
使用应用程序 (Rapid Chat)
- 要将新的 IP 地址添加到地址框,请双击您的头像。
- 右键单击“发送”按钮以获取更多选项。
- 通过单击“连接”按钮,确保所选客户端可用。
1. 使用 TCP/IP 发送消息
首先,我们需要进行一些声明
Imports System.Net.Sockets
Imports System.Threading
Dim Listener As New TcpListener(65535)
Dim Client As New TcpClient
Dim Message As String = ""
您可以使用任何您想要的 socket。 我通常选择最后几个 socket 之一,以确保没有其他应用程序正在使用它们。 任何高达并包括端口 65535 的 socket 都适合这项工作。
现在我们需要启动监听过程。 这将打开指定的 socket 以接收发送给它的任何数据包。 在窗体的加载事件中,启动侦听器。
Dim ListenerThread As New Thread(New ThreadStart(AddressOf Listening))
ListenerThread.Start()
Private Sub Listening()
Listener.Start()
End Sub
没有计时器,侦听器将毫无用处。 我们需要计时器不断更新侦听器以接收数据。
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
If Listener.Pending = True Then
Message = ""
Client = Listener.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
RichTextBox1.ForeColor = Color.Black
RichTextBox1.Text += Message + vbCrLf
'Here you can enter anything you would like
'to happen when a message is received,
'For instance; Play a sound, Show a message Box, A Balloon Tip etc.
End Sub
现在向特定客户端发送消息
Private Sub btnSend_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSend.Click
If txtName.Text = "" Or cmbAddress.Text = "" Then
'Check to make sure that the user has entered
'a display name, and a client IP Address
'If Not, Show a Message Box
MessageBox.Show("All Fields must be Filled", _
"Error Sending Message", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Try
Client = New TcpClient(cmbAddress.Text, 65535)
'Declare the Client as an IP Address.
'Must be in the Correct form. eg. 000.0.0.0
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(txtName.Text & " Says: " & txtmessage.Text)
Writer.Flush()
'Write the Message in the stream
RichTextBox1.Text += (txtName.Text & " Says: " & txtmessage.Text) + vbCrLf
txtmessage.Text = ""
Catch ex As Exception
Console.WriteLine(ex)
Dim Errorresult As String = ex.Message
MessageBox.Show(Errorresult & vbCrLf & vbCrLf & _
"Please Review Client Address", _
"Error Sending Message", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub
发送消息就是这样。
现在设置使用 *UnoLibs.Net.dll* 的文件传输。
2. 使用 UnoLibs.Net.dll 类进行文件传输
我喜欢这个类的一点是它非常易于使用。 它快速、简单,最重要的是,它有效!
首先在您的项目中引用它。
Imports UNOLibs.Net.ClientClass
声明客户端和服务器。
Dim clnt As New UNOLibs.Net.ClientClass
Dim WithEvents server As UNOLibs.Net.ServerClass
现在向客户端发送一些文件
Private Sub SendFileToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles SendFileToolStripMenuItem.Click
OpenFileDialog1.ShowDialog()
If DialogResult.OK Then
RichTextBox1.Text += (txtName.Text & " Is Sending You a File...") + vbCrLf
clnt.SendFiles(cmbAddress.Text, 65533, OpenFileDialog1.FileNames)
Else
Exit Sub
End If
End Sub
在 VB.NET 中使用 My.Settings 类
我决定将此部分放在我的文章中,因为我知道在 VB.NET 中保存用户和/或应用程序设置时存在一些混淆。 关于 My.Settings
类的一大优点是,只需很少的代码即可保存各种设置。 My.Settings
类允许您保存以下内容
- 字符串(最常见)
- 字体
- 窗体大小、颜色、状态等。
- Checkstate
- 整数
- 还有很多
要创建设置,在您的项目中,转到项目 >(*您的项目名称*)属性,然后选择“设置”选项卡。 输入名称、类型(通常为字符串)、范围(用户或应用程序)和设置的值。
要在启动时加载设置,对于字符串设置,它可能看起来像这样
TextBox1.Text = My.Settings.RandomString
要在运行时更改设置的值,它实际上是相同的。
My.Settings.RandomString = RichTextBox1.Text
您的应用程序将在退出时自动保存用户范围的设置。 要启用或禁用此设置,请执行以下操作
My.Application.SaveMySettingsOnExit = True
'Or
My.Application.SaveMySettingsOnExit = False
就这么简单。 无需加载 XML 文件并重新编写它们。
许可证
此代码可以自由使用,没有任何限制。 有关许可的更多信息,请查看项目文件中的代码。
历史
- 2009 年 8 月 13 日 -- 原始发布日期
- 2009年8月20日
- 次要错误修复
- 添加了一些功能
- 添加了缺少的源文件