65.9K
CodeProject 正在变化。 阅读更多。
Home

一个 TCP/IP 聊天程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.47/5 (45投票s)

2009年8月12日

CPOL

3分钟阅读

viewsIcon

405882

downloadIcon

69939

一个使用 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日
    • 次要错误修复
    • 添加了一些功能
    • 添加了缺少的源文件
© . All rights reserved.