gpt4 book ai didi

vb.net - 关闭 socket ?

转载 作者:行者123 更新时间:2023-12-03 11:58:14 26 4
gpt4 key购买 nike

我有一个需要通过特定端口将数据流传输到服务器的应用程序。当应用程序启动时,它将执行许多检查,以检查网络连接是否可达主机。我希望它也检查端口以确保它能够接收数据。

我有以下代码:

Private Function CheckPort(ByVal Host As String) As Boolean

Dim IPs() As IPAddress = Dns.GetHostAddresses(Host)
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

s.Connect(IPs(0), <port # removed>)

If s.Poll(-1, SelectMode.SelectWrite) Then
Return True
End If

Return False

End Function

该代码运行良好,但是我担心通过执行检查,我可能会无意中阻止来自应用程序的后续消息到达端口。执行此检查会干扰我要发送给主机的实际数据吗?返回函数之前,我应该使用 s.close()关闭套接字吗?

最佳答案

我主要同意CodeCaster的回应。
如果您说服务器有故障,则检查端口连接几分钟后,服务器也可能断开了连接,甚至关闭了连接。
如果您仍然希望这样做,以减少使用户写一些以后无法发送的消息的风险,那么这将是一个很好的方法。一种替代方法是,您可以将数据另存为草稿,在本地或其他位置保存,以便在服务器可用时稍后发送。

现在,转到您的代码:
您正在打开CheckPort函数内部的连接,因此当函数完成时,您将失去对s(打开的套接字)的任何引用。在C语言中,您将发生资源泄漏;在Java中,垃圾收集器将处理Socket并将其关闭。我不知道它在VB中如何运行,但是在退出该功能之前,我已经关闭了该套接字。无论如何,这都是健康的做法。

此外,当您准备好要发送的数据时,如果丢失对打开的套接字的引用或关闭了套接字,则无法在同一连接上执行该操作(除非VB有我不知道的任何技巧)知道)。您将必须打开一个新连接以发送数据。不用担心,即使您之前进行过支票,也可以执行此操作。服务器会将其视为只是一个不同的连接,可能来自不同的源端口(或者如果您之前关闭了连接,则可能是相同的,这取决于操作系统)。

关于vb.net - 关闭 socket ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19729220/

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