Red de conocimiento informático - Material del sitio web - Cómo utilizar WINSOCK en VB

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>

sckServer(0).Listen

End Sub

Private Sub sckServer_ConnectionRequest _

(Indexar como entero, ByVal requestID Mientras)

Si Índice = 0 Entonces

intMax = intMax 1

Cargar sckServer(intMax)

sckServer(intMax). LocalPort = 0

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.