Как определить, какое приложение (если оно есть) прослушивает данный TCP-порт в Windows? Вот xampp делает это:
Я бы предпочел сделать это в VB.NET и хочу предложить пользователю возможность закрыть это приложение.
Как определить, какое приложение (если оно есть) прослушивает данный TCP-порт в Windows? Вот xampp делает это:
Я бы предпочел сделать это в VB.NET и хочу предложить пользователю возможность закрыть это приложение.
У меня недостаточно представителей, чтобы прокомментировать принятый ответ, но я бы сказал, что считаю проверку возникновения исключения довольно плохой практикой!
Я потратил довольно много времени на поиск решения очень похожей проблемы и уже собирался пойти по маршруту P/Invoke GetExtendedTcpTable, когда наткнулся на IPGlobalProperties
. Я еще не проверял это должным образом, но что-то вроде этого...
Imports System.Linq
Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Windows.Forms
А потом...
Dim hostname = "server1"
Dim portno = 9081
Dim ipa = Dns.GetHostAddresses(hostname)(0)
Try
' Get active TCP connections - the GetActiveTcpListeners is also useful if you're starting up a server...
Dim active = IPGlobalProperties.GetIPGlobalProperties.GetActiveTcpConnections
If (From connection In active Where connection.LocalEndPoint.Address.Equals(ipa) AndAlso connection.LocalEndPoint.Port = portno).Any Then
' Port is being used by an active connection
MessageBox.Show("Port is in use!")
Else
' Proceed with connection
Using sock As New Sockets.Socket(Sockets.AddressFamily.InterNetwork, Sockets.SocketType.Stream, Sockets.ProtocolType.Tcp)
sock.Connect(ipa, portno)
' Do something more interesting with the socket here...
End Using
End If
Catch ex As Sockets.SocketException
MessageBox.Show(ex.Message)
End Try
Я надеюсь, что кто-то найдет это полезным быстрее, чем я!
Dim hostname As String = "server1"
Dim portno As Integer = 9081
Dim ipa As IPAddress = DirectCast(Dns.GetHostAddresses(hostname)(0), IPAddress)
Try
Dim sock As New System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp)
sock.Connect(ipa, portno)
If sock.Connected = True Then
' Port is in use and connection is successful
MessageBox.Show("Port is Closed")
End If
sock.Close()
Catch ex As System.Net.Sockets.SocketException
If ex.ErrorCode = 10061 Then
' Port is unused and could not establish connection
MessageBox.Show("Port is Open!")
Else
MessageBox.Show(ex.Message)
End If
End Try
это помогло мне :)
netstat -no
и проанализировать его вывод. - person vladr   schedule 12.11.2012