Sacado de la web de Luciano

http://www.recursosvisualbasic.com.a...rto-en-uso.htm

<blockquote>
<h2>Esta rutina averigua y devuelve un valor de tipo boolean si un puerto
determinado está siendo usado utilizando una referencia al
objeto Winsock</h2>


Para el ejemplo no se necesita agregar un control WinSock ya que
se crea mediante Automatización con CreateObject, es decir
de esta forma:
Set Objeto WinSock = CreateObject("MSWinsock.Winsock.1")





Controles: Colocar un Command1 , un Text1 y especificar
en el TextBox el número de puerto que se quiere consultar



</blockquote>
<blockquote>
Código en un formulario
Private Function Puerto_En_Uso(ByVal Puerto As Integer) As Boolean


On Error Resume Next
'Variable de retorno y de objeto de Socket
Dim Win_Socket As Object, ret As Boolean


'creamos un objeto para utilizar el winsock
Set Win_Socket = CreateObject("MSWinsock.Winsock.1")

If Err.Number > 0 Then
Err.Raise 30000, , "No se pudo crear el Objeto. Verifique que tiene instalada la referencia"
Exit Function
End If

'Limpiamos el error
Err.Clear

'Establecemos el puerto
Win_Socket.LocalPort = Puerto

'Ponemos a la escucha
Win_Socket.Listen


ret = Err.Number = 10048

'Cerramos el Socket
Win_Socket.Close
'Eliminamos la variable
Set Win_Socket = Nothing

'Devolvemos el valor True/False si el puerto está en uso
Puerto_En_Uso = ret

End Function


Private Sub Command1_Click()
MsgBox "El puerto está en uso: ?? " & Puerto_En_Uso(CLng(Text1))
End Sub

</blockquote>