¡Uso detallado de VBwinsock!
Utilice el control WinSock para establecer una conexión con una computadora remota e intercambiar datos a través del Protocolo de datagramas de usuario (UDP) o el Protocolo de control de transmisión (TCP). Ambos protocolos se pueden utilizar para crear aplicaciones cliente-servidor. Al igual que los controles del temporizador, los controles de WinSock no son visibles en tiempo de ejecución.
Posibles usos
Crear una aplicación cliente que recopila información del usuario y envía la información recopilada a un servidor central.
Cree una aplicación de servidor que sirva como receptor de datos para múltiples usuarios.
Crear una aplicación de chat.
Seleccionar un protocolo de comunicación
Al utilizar el control WinSock, primero debe considerar qué protocolo utilizar. Los protocolos que se pueden utilizar son TCP y UDP. La diferencia importante entre estos dos protocolos es su estado de conexión:
El control del protocolo TCP es un protocolo basado en conexión que se puede comparar con un sistema telefónico. Los usuarios deben establecer una conexión antes de que pueda comenzar la transferencia de datos.
El protocolo UDP es un protocolo sin conexión, y la transmisión entre dos ordenadores es similar al envío de correo: la información se envía de un ordenador a otro, pero no existe una conexión clara entre ambos. Además, la cantidad máxima de datos transferidos en una sola transferencia depende de la red específica.
La elección del protocolo muchas veces depende de la aplicación que necesites crear. Aquí hay algunas preguntas que lo ayudarán a elegir el protocolo correcto:
¿La aplicación necesita obtener confirmación del cliente o servidor al enviar o recibir datos? Si es necesario, utilice el protocolo TCP para establecer una conexión clara antes de enviar o recibir datos.
¿La cantidad de datos es particularmente grande (como imágenes y archivos de sonido)? Una vez que se establece una conexión, el protocolo TCP mantiene la conexión y garantiza la integridad de los datos. Sin embargo, este tipo de conexiones requieren más recursos informáticos y, por tanto, "cuestan" más.
¿Los datos se envían de forma intermitente o dentro de una sesión? Por ejemplo, si una aplicación necesita notificar a la computadora cuando se completa una tarea, el protocolo UDP es más adecuado para enviar pequeñas cantidades de datos.
Configuración del protocolo
En tiempo de diseño, puede configurar el protocolo utilizado por su aplicación haciendo clic en Protocolo en la ventana Propiedades y seleccionando sckTCPProtocol o sckUDPProtocol. También puede utilizar el código del programa para configurar las propiedades del protocolo, de la siguiente manera:
Winsock1.Protocol = sckTCPProtocol
Determinar el nombre de la computadora
Cuando se conecta a un control remoto computadora, necesita saber su dirección IP o el nombre "agradable" de la computadora. Una dirección IP es una cadena de tres números separados por puntos (por ejemplo, xxx.xxx.xxx.xxx). A menudo, lo más fácil de recordar es un "bonito nombre" para su computadora.
Para determinar el nombre de su computadora, siga estos pasos:
En la barra de tareas de la computadora, haga clic en Inicio.
En Configuración, haga clic en Panel de control.
Haz doble clic en el icono de red.
Haz clic en la pestaña "Logotipo".
El nombre del ordenador se puede encontrar en el cuadro Nombre del ordenador.
El nombre de la computadora anterior se puede utilizar como valor de la propiedad RemoteHost.
Preferencias de conexión TCP
Si su aplicación utilizará el protocolo TCP, primero debe determinar si la aplicación es un servidor o un cliente. Si está creando en el lado del servidor, la aplicación debe "escuchar" en el puerto especificado.
Cuando el cliente solicita una conexión, el servidor puede aceptar la solicitud y establecer la conexión. Una vez establecida la conexión, el cliente y el servidor pueden comunicarse entre sí libremente.
Los siguientes pasos crearán un servidor muy simple:
Para crear un servidor TCP, siga estos pasos:
Cree 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 el primero txtSendData y el 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 de escucha.
tcpServer.LocalPort = 1001
tcpServer.Listen
frmClient.Show 'Mostrar el formulario del cliente.
End Sub
Private Sub tcpServer_ConnectionRequest _
(ByVal requestID As Long)
'Compruebe si la propiedad de estado del control es cerrado.
'Si no,
'Cierra esta conexión antes de aceptar nuevas conexiones.
Si tcpServer.State <> sckClosed Entonces _
tcpServer.Close
'Aceptar conexión con el parámetro requestID
'.
tcpServer.Accept requestID
End Sub
Private Sub txtSendData_Change()
'El control TextBox se llama 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 recibidos.
'Llama al método GetData y asigna los datos a la propiedad Text del cuadro de texto llamado txtOutput
'Data.
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 correctamente, también se debe crear una aplicación cliente.
Para crear un cliente TCP, siga estos pasos:
Agregue un nuevo formulario a su 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.
Agregue un control CommandButton al formulario y asígnele el nombre cmdConnect.
Cambie el título del control CommandButton a Conectar.
Añade el siguiente código al formulario.
Énfasis Debes cambiar el valor de la propiedad RemoteHost por el nombre de tu computadora.
Private Sub Form_Load()
'El nombre del control Winsock es tcpClient.
'Nota: Para especificar un host remoto, puede usar
' una dirección IP (por ejemplo, "121.111.1.1") o un "buen nombre" para la computadora, como se muestra a continuación.
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
'Llamar al método de conexión. > Sub privado tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData como cadena
tcpClient.GetData strData
txtOutput.Text = strData
End Sub
El código anterior crea una aplicación modelo cliente/servidor simple. Podemos ejecutar ambas aplicaciones al mismo tiempo: ejecute el proyecto y haga clic en Conectar. Escriba texto en el cuadro de texto txtSendData de uno de los dos formularios y vea aparecer el mismo texto 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. También puede utilizar un único control para aceptar múltiples solicitudes de conexión al mismo tiempo creando una serie de controles. Al utilizar este enfoque, simplemente crea una nueva instancia de control (estableciendo su propiedad de índice) y llama al método Accept en la nueva instancia sin cerrar la conexión.
El siguiente código supone que el formulario denominado sckServer tiene un control Winsock con su propiedad Index 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 de carga 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 de escucha del control, convirtiéndolo en un control de "escucha". Cuando llega una solicitud de conexión, el código verifica si el índice es 0 (el valor del control de "escucha"). Si es 0, el control de escucha incrementará el valor de intMax y creará una nueva instancia de control con este valor. La nueva instancia de control se utilizará para aceptar solicitudes 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 As Long)
Si Index = 0 Entonces
intMax = intMax 1
Cargar sckServer(intMax)
sckServer (intMax).LocalPort = 0
sckServer(intMax).Aceptar requestID
Cargar txtData(intMax)
Fin si
Fin Sub
Preprocesamiento UDP
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 (conectando ambos lados):
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 para especificar el LocalPort a utilizar. (Este método se analizará en detalle a continuación)
Dado que dos computadoras pueden considerarse "iguales", esta aplicación también se denomina aplicación de igual a igual. Para ilustrar esto, crearemos una aplicación de "chat" que permita a dos personas hablar 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.
En el formulario, haga clic en Protocolo y cambie el protocolo a UDPProtocol.
En el formulario, cambie el nombre del formulario predeterminado a frmPeerA.
Establezca el título del formulario en "Peer A". p>
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
'Énfasis: Debes cambiar el valor de RemoteHost es el nombre de la computadora.
.RemoteHost= "PeerB"
.RemotePort = 1001 'Número de puerto al que conectarse.
.Bind 1002 'Para enlazar al puerto local.
Terminar con
frmPeerB.Show 'Mostrar el segundo formulario.
End Sub
Private Sub txtSend_Change()
'Enviar inmediatamente después de ingresar el texto.
udpPeerA.SendData txtSend.Text
End Sub
Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData txtSend.Text
Fin SubGetData strData
txtOutput.Text = strData
Fin Sub
Para crear un segundo socio UDP, siga estos pasos:
Agregue lo siguiente al proyecto 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.
Usando udpPeerB
'Énfasis: el valor de RemoteHost debe cambiarse a
'Nombre del equipo.
.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 Para el ejemplo anterior, presione la tecla F5 para ejecutar el proyecto, luego escriba algún contenido en el cuadro de texto txtSend de los dos formularios y escriba algo de texto en cada formulario. El texto escrito se mostrará en el cuadro de texto txtOutput de otro formulario.
Acerca del método de enlace
En el código anterior, el método de enlace se llamará al crear la aplicación UDP, lo cual es necesario y el propósito del método de enlace es "reservar"; el control "Un puerto local". Por ejemplo, si vincula un control al puerto 1001, otras aplicaciones no podrán "escuchar" en ese puerto. Este enfoque evita que otras aplicaciones utilicen el mismo puerto.
El segundo parámetro del método Bind es opcional. Si tiene 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 Configuración del panel de control de la computadora.
Al utilizar el protocolo UDP, puede cambiar las propiedades RemoteHost y RemotePort a voluntad mientras siempre se vincula al mismo LocalPort, a diferencia del protocolo TCP, que requiere que cierre la conexión antes de cambiar las propiedades RemoteHost y RemotePort. .
Referencia: .
/home/20011125/15/387627.html.