gpt4 book ai didi

vb.net - 如何创建 GUI 中所有按钮都可以使用的 TCP 连接和流?

转载 作者:可可西里 更新时间:2023-11-01 02:48:43 24 4
gpt4 key购买 nike

我正在尝试为 TCP 连接中的服务器创建 GUI。我想要一个创建连接和可能的底层流的按钮,然后有其他按钮通过这个流发送序列化命令。我遇到了问题,因为每个按钮都充当子过程,所以我相信流超出范围并且对每个按钮不可用。

我已经尝试在按钮之外创建流,但下面的代码在 myServer.Start() 处抛出错误,表示未声明 myServer。

Public Class Form1

Dim myIP As IPAddress = IPAddress.Parse("my ip")
Dim myServer As New TcpListener(myIP, 800)
myServer.Start() 'Error line

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Stream Write Stuff
End Sub

End Class

我也试过在每次按下按钮时开始监听,但是在连接后 myServer.Start() 无限期暂停,同时监听未到来的连接尝试。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click      
myServer.Start()
Dim myClient As TcpClient = myServer.AcceptTcpClient()
Dim myStream As NetworkStream = myClient.GetStream
myStream.Write(xxx)
End Sub

如何创建一个连接和流,供我添加到 GUI 的所有按钮使用?

最佳答案

我如何创建连接和流以供我添加到 GUI 的所有按钮使用?

Public Class Form1
' just declare the variables
Private myIP As IPAddress
Private myServer As TcpListener
Private myStream As NetworkStream

Sub btnStart_Click(...
' create the objects when you need them
myIP = IPAddress.Parse("my ip")
myServer = New TcpListener(...)
myStream = myClient.GetStream

声明一个对象变量和创建它的实例是两件不同的事情。你同时做这两件事:

Dim myServer As New TcpListener(...)

Dim 部分声明变量(Private | Friend | Public)。 New 关键字创建一个实例;在使用对象之前,您需要同时完成这两项工作,但不必同时完成。长格式更清楚地表明有 2 个部分:

Dim myServer As TcpListener = New TcpListener(...)

在哪里声明变量决定了变量的作用域。 sub 中的任何内容都只有过程级别的范围。它不会存在于该程序之外。在顶部声明,在任何过程之外,myIPmyServermyStream 将以该形式随处可用。

一旦它们被声明,您就可以在 btnStart_Click(或 Form Load 等)中创建一个实例,如上所示。

还有 block 作用域涉及结构,例如 If/End IfUsing/End UsingFor Each/Next。在其中声明的变量的范围仅限于该 block :

If cr IsNot Nothing Then
Dim temp As Decimal = cr.Total
End If

lblTotal.Text = temp ''temp' is not declared. It may be inaccessible

最后一行将是一个错误,因为 temp 是在本地 block 内声明的 (Dim),因此它不存在于本地 block 之外。这将适用于 If/End IfUsing/End UsingFor Each/Next —— 基本上,任何导致缩进的内容都会创建一个本地 block 。

另请参阅:

Scope in Visual Basic

关于vb.net - 如何创建 GUI 中所有按钮都可以使用的 TCP 连接和流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32509601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com