如何通过网络在两个 VB.NET 应用程序之间进行通信

Posted

技术标签:

【中文标题】如何通过网络在两个 VB.NET 应用程序之间进行通信【英文标题】:How to communicate between two VB.NET applications over the network 【发布时间】:2013-09-09 11:48:28 【问题描述】:

我正在用 VB.NET 编程。

我想将一个字符串或整数从一个 VB.NET 应用程序发送到不同计算机上的另一个 VB.NET 应用程序。

我看了一些教程,但所有教程都只能在本地网络上运行,我希望它可以在 Internet 上运行。

这是我的本地连接代码:

Dim Listener As New TcpListener(34349)
Dim Client As New TcpClient
Dim Message As String = ""


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
    End If
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
        MessageBox.Show("All Fields must be Filled", _
                        "Error Sending Message", _
                        MessageBoxButtons.OK, _
                        MessageBoxIcon.Error)
    Else
        Try
            Client = New TcpClient(cmbAddress.Text, 34349)
            Dim Writer As New StreamWriter(Client.GetStream())
            Writer.Write(txtName.Text & " Says:  " & txtmessage.Text)
            Writer.Flush()
            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

txtmessage.text 是我要发送的字符串。

txtName.Text 只是发件人的名字

cmbAddress.text 是远程计算机的IP address

如何在 VB.NET 中将数据发送到另一台远程计算机?

【问题讨论】:

看看一些在互联网上工作的套接字示例,除非你的端口被阻塞 这两个应用程序是否总是位于同一台计算机上(或在一定数量的计算机上),或者您正在寻找两台不同随机计算机中的两个程序之间的通信? 对我来说听起来像是服务器 如果您使用 TCP 或 UDP 之类的协议,则网络是本地网络还是互联网或其他网络都没有区别。 我尝试使用 tcp 服务器和客户端,但它只能在本地网络上工作 【参考方案1】:

您所说的是创建一个客户端-服务器应用程序。有几种不同的方法可以做到这一点。

最简单的方法是让您的程序与 Web 应用程序或 Web 服务通信。基本上,您将创建一个站点,您的程序将连接到该站点并发送数据,或者让它在预定的时间间隔检查数据。为此,您需要使用某种数据库来保存更新,直到客户端请求它们。

第二个选项更复杂,并利用套接字连接。您将基本上使用套接字连接到远程机器上某个端口上运行的程序。您的程序将需要有一个发送类来发送数据以及一个侦听器类来等待传入连接。您还必须记住,您需要在两个本地防火墙上打开传入端口。由于防火墙问题以及设置套接字连接的复杂性,这是一个更高级的选项。

【讨论】:

以上是关于如何通过网络在两个 VB.NET 应用程序之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

如果一个启动另一个,您如何在 VB.Net 中跨项目进行调试?

带有MS访问数据库作为后端的VB.NET如何通过将数据库文件放入AppData文件夹进行部署?

版本之间的引用。网络框架

获取两个标签之间的内部文本 - VB.NET - HtmlAgilityPack

Vb.net 多个线程执行顺序的问题

VB.NET程序界面假死如何解决