Cómo utilizar WINSOCK en VB
Te doy un ejemplo, pruébalo tú mismo
Los siguientes pasos crean un servidor muy simple:
Para crear un servidor TCP, sigue los pasos a continuación Ejecutar :
Crea un nuevo proyecto EXE estándar.
Cambie el nombre del formulario predeterminado a frmServer.
Cambie el título del formulario a "Servidor TCP".
Coloque un control Winsock en el formulario y cambie su nombre a tcpServer.
Agrega dos controles TextBox al formulario. Nombra al primero txtSendData y al segundo txtOutput.
Añade el siguiente código al formulario.
Private Sub Form_Load()
'Establece la propiedad LocalPort en un número entero.
'Luego llama al método Listen.
tcpServer.LocalPort = 1001
tcpServer.Listen
frmClient.Show 'Muestra el formulario del cliente.
End Sub
Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
'Comprueba si la propiedad State del control es cerrado .
'Si no,
'Cierra esta conexión antes de aceptar nuevas conexiones.
Si tcpServer.State lt;gt;sckClosed Entonces _
tcpServer.Close
'Aceptar
' conexión con el parámetro requestID.
tcpServer.Accept requestID
End Sub
Private Sub txtSendData_Change()
'En el control TextBox llamado txtSendData
'Contiene los datos a enviar. Cuando el usuario escribe datos en el cuadro de texto
', utilice el método SendData
' para enviar la cadena ingresada.
tcpServer.SendData txtSendData.Text
End Sub
Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
'Declara una variable para los datos entrantes.
'Llama al método GetData y asigna los datos a la propiedad Text del TextBox llamado txtOutput
'.
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub
Los pasos anteriores crean una aplicación de servidor simple. Para que funcione, también se debe crear una aplicación cliente.
Para crear un cliente TCP, siga estos pasos:
Agregue un nuevo formulario al proyecto y asígnele el nombre frmClient.
Cambie el título del formulario a "Cliente TCP".
Agregue un control Winsock al formulario y asígnele el nombre tcpClient.
Agregue dos controles TextBox en frmClient. Nombra al primero txtSend y al segundo txtOutput.
Coloque un control CommandButton en el formulario y asígnele el nombre cmdConnect.
Cambie el título del control CommandButton a Conectar.
Añade el siguiente código al formulario.
IMPORTANTE Debes cambiar el valor de la propiedad RemoteHost por el nombre de tu ordenador.
Private Sub Form_Load()
'El nombre del control Winsock es tcpClient.
'Nota: Para especificar un host remoto, puede utilizar
' la dirección IP (por ejemplo: "121.111.1.1") o
' la Los "nombres bonitos" de la computadora son los siguientes.
tcpClient.RemoteHost = "RemoteComputerName"
tcpClient.RemotePort = 1001
Fin Sub
Sub privado cmdConnect_Click()
'Llame al método Connect para inicializar la conexión.
tcpClient.Connect
End Sub
Private Sub txtSendData_Change()
tcpClient.SendData txtSend.Text
End Sub
Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
tcpClient.GetData strData
txtOutput.Text = strData
End Sub
El código anterior crea una aplicación simple en modo cliente/servidor. Podemos ejecutar ambos: ejecute el proyecto y haga clic en Conectar. Escriba texto en el cuadro de texto txtSendData de uno de los dos formularios y verá que el mismo texto aparece en el cuadro de texto txtOutput del otro formulario.
Aceptar múltiples solicitudes de conexión
El servidor básico diseñado anteriormente solo puede aceptar una solicitud de conexión. Al crear una matriz de control, un control también puede aceptar múltiples solicitudes de conexión al mismo tiempo. Con este enfoque, en lugar de cerrar la conexión, simplemente crea una nueva instancia del control (estableciendo su propiedad de índice) y luego llama al método Accept en la nueva instancia.
El siguiente código supone que hay un control Winsock en el formulario llamado sckServer y que su propiedad Index está establecida en 0, por lo tanto, el control es parte de la matriz de controles. En la sección de declaración, se declara una variable a nivel de módulo intMax. En el evento Load del formulario, intMax se establece en 0 y la propiedad LocalPort del primer control de la matriz se establece en 1001. Luego llame al método Listen del control, convirtiéndolo en un control de "escucha". Cuando llega una solicitud de conexión, el código detecta si el índice es 0 (el valor del control de "escucha"). Si es 0, el control de escucha incrementará el valor de intMax y usará ese número para crear una nueva instancia de control. Luego, use la nueva instancia de control para aceptar la solicitud de conexión.
IntMax privado siempre
Sub privado Form_Load()
intMax = 0
sckServer(0).LocalPort = 1001 p>
p>
sckServer(0).Listen
End Sub
Private Sub sckServer_ConnectionRequest _
(Indexar como entero, ByVal requestID Mientras) p>
Si Índice = 0 Entonces
intMax = intMax 1
Cargar sckServer(intMax)
sckServer(intMax). LocalPort = 0 p>
sckServer(intMax).Aceptar requestID
Cargar txtData(intMax)
Finalizar si
Finalizar sub
UDP Preliminar
Crear aplicaciones UDP es más sencillo que crear aplicaciones TCP porque el protocolo UDP no requiere una conexión explícita. En la aplicación TCP anterior, un control Winsock debe "escuchar" explícitamente y el otro debe usar el método Connect para inicializar la conexión.
El protocolo UDP no requiere una conexión explícita. Para enviar datos entre dos controles, debe completar los siguientes tres pasos (en ambos lados de la conexión):
Establezca la propiedad RemoteHost con el nombre de la otra computadora.
Establezca la propiedad RemotePort en la propiedad LocalPort del segundo control.
Llame al método Bind y especifique el LocalPort utilizado. (Este método se analiza en detalle a continuación).
Debido a que el estado de las dos computadoras puede considerarse "igual", esta aplicación también se denomina punto a punto. Para ilustrar este problema de manera concreta, creemos una aplicación de "chat" a través de la cual dos personas puedan tener una conversación en tiempo real.
Para crear un socio UDP, siga estos pasos:
Cree un nuevo proyecto EXE estándar.
Cambie el nombre del formulario predeterminado a frmPeerA.
Cambie el título del formulario a "Peer A".
Coloque un control Winsock en el formulario y asígnele el nombre udpPeerA.
En la página Propiedades, haga clic en Protocolo y cambie el protocolo a UDPProtocol.
Agrega dos controles TextBox al formulario. Nombra al primero txtSend y al segundo txtOutput.
Añade el siguiente código al formulario.
Private Sub Form_Load()
'El nombre del control es udpPeerA
With udpPeerA
'Importante: El valor de RemoteHost debe ser
'Cambiar al nombre de la computadora.
.RemoteHost= "PeerB"
.RemotePort = 1001 'Número de puerto de la conexión.
.Bind 1002 'Enlazar al puerto local.
Terminar con
frmPeerB.Show 'Mostrar el segundo formulario.
End Sub
Private Sub txtSend_Change()
'Envía texto inmediatamente a medida que lo escribes.
udpPeerA.SendData txtSend.Text
End Sub
Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub
Para crear un segundo Para crear un socio UDP, siga estos pasos:
Agregue un formulario estándar al proyecto.
Cambie el nombre del formulario a frmPeerB.
Cambie el título del formulario a "Peer B".
Coloque un control Winsock en el formulario y asígnele el nombre udpPeerB.
En la página Propiedades, haga clic en Protocolo y cambie el protocolo a UDPProtocol.
Agrega dos controles TextBox al formulario. Nombra al primero txtSend y al segundo txtOutput.
Añade el siguiente código al formulario.
Private Sub Form_Load()
'El nombre del control es udpPeerB.
Con udpPeerB
'Importante: El valor de RemoteHost debe cambiarse a
'El nombre de la computadora.
.RemoteHost= "PeerA"
.RemotePort = 1002 'El puerto al que conectarse.
.Bind 1001 'Enlazar al puerto local.
Terminar con
End Sub
Private Sub txtSend_Change()
'Enviar texto inmediatamente después de escribir.
udpPeerB.SendData txtSend.Text
End Sub
Private Sub udpPeerB_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerB.GetData strData
txtOutput.Text = strData
End Sub
Si desea Pruebe lo anterior. Por ejemplo, presione la tecla F5 para ejecutar el proyecto y luego escriba algo de texto en el cuadro de texto txtSend de los dos formularios. El texto que escriba aparecerá en el cuadro de texto txtOutput de otro formulario.
Acerca del método Bind
En el código anterior, el método Bind se llama al crear la aplicación UDP, lo cual es necesario. El propósito del método Bind es "reservar" un puerto local para el control. Por ejemplo, si vincula un control al puerto 1001, otras aplicaciones no podrán "escuchar" en ese puerto. Este método evita que otras aplicaciones utilicen el mismo puerto.
El segundo parámetro del método Bind es opcional. Si hay varios adaptadores de red en su computadora, puede usar el parámetro LocalIP para especificar qué adaptador usar. Si omite este parámetro, el control utiliza el primer adaptador que aparece en el cuadro de diálogo Panel de control de red en la configuración del Panel de control de su computadora.
Al utilizar el protocolo UDP, puede cambiar las propiedades RemoteHost y RemotePort de forma arbitraria mientras permanece siempre vinculado al mismo LocalPort. A diferencia del protocolo TCP, la conexión debe cerrarse antes de cambiar las propiedades RemoteHost y RemotePort.