Cómo utilizar VB para crear una herramienta de chat
Cree una aplicación de servidor que sirva como receptor de datos para múltiples usuarios.
Crear una aplicación de "chat". 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: TCP es un protocolo basado en conexión que puede compararse 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 explícita entre ambos. Además, la cantidad máxima de datos transferidos en una sola transacción depende de la red específica. El protocolo a elegir suele depender de la aplicación que necesite crear. Las siguientes preguntas pueden ayudar a elegir el protocolo adecuado: ¿Necesita la aplicación 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 apropiado. Configuración de 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 configurar las propiedades del protocolo usando el código del programa, de la siguiente manera: Winsock1.Protocol = sckTCPProtocol Determinación del nombre de la computadora Al conectarse a una computadora remota, necesita saber su dirección IP o "buen nombre". Una dirección IP es una secuencia de tres números separados por puntos (como 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.
Si la aplicación utilizará el protocolo TCP, primero debe determinar si la aplicación es un servidor o un cliente. Si está creando un lado del servidor, la aplicación debe "escuchar" en el puerto especificado. Cuando el cliente envía una solicitud de 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 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.
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 está cerrada. De lo contrario, 'Cierre esta conexión antes de aceptar nuevas conexiones. Si tcpServer.State <> sckClosed Entonces _ tcpServer.Close 'Aceptar conexiones con el parámetro requestID. tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival _ (ByVal bytesTotal As Long) 'Declara una variable para los datos recibidos. Llame al método GetData y asigne los datos a la propiedad Texto del cuadro de texto denominado 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 correctamente, también se debe crear un programa 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.
Agregue un control CommandButton al formulario y asígnele el nombre cmdConnect.
Cambie el título del control CommandButton a Conectar.
Agrega el siguiente código al formulario
Agrega el siguiente código al formulario. Enfatice que el valor de la propiedad RemoteHost debe cambiarse por el nombre de su computadora. Private Sub Form_Load() 'El nombre del control Winsock es tcpClient. tcpClient.RemoteHost = "RemoteComputerName" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() 'Llama al método de conexión 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 un Cliente simple /aplicación de modelo de servidor. Podemos ejecutar ambos programas 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 verá que el mismo texto aparecerá en el cuadro de texto txtOutput del otro formulario. Aceptación de múltiples solicitudes de conexión El servidor básico diseñado anteriormente sólo 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.
Con este enfoque, no es necesario cerrar la conexión, simplemente cree una nueva instancia del control (estableciendo su propiedad de índice) y llame al método de aceptación en la nueva instancia. El siguiente código supone que hay un control Winsock en el formulario denominado sckServer cuya 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 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. intMax privado siempre que Private Sub Form_Load() intMax = 0 sckServer(0).LocalPort = 1001 sckServer(0).Listen End Sub Private Sub sckServer_ConnectionRequest _ (Índice como entero, ByVal requestID como largo) Si índice = 0 Entonces intMax = intMax + 1 Load sckServer(intMax) sckServer(intMax ).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End If End Sub Prefacio UDP Crear aplicaciones UDP es más sencillo que crear aplicaciones TCP, porque el protocolo UDP no Se 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. 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 para especificar el LocalPort a utilizar. (Debido a que los estados de dos computadoras pueden considerarse "iguales", este tipo de aplicación también se denomina aplicación peer-to-peer. A modo de ejemplo, a continuación se explica cómo crear una aplicación de "chat" que permita a dos personas hablar en tiempo real. . Para 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 de propiedades, haga clic en Protocolo y cambie Protocolo a UDPProtocol.
Agregue dos controles TextBox al formulario. Nombra al primero txtSend y al segundo txtOutput.
Agrega el siguiente código al formulario () 'El nombre del control es udpPeerA Con udpPeerA' Énfasis: el valor. de RemoteHost debe cambiarse al nombre de la computadora .RemoteHost= "PeerB" .RemotePort = 1001 'El número de puerto que se conectará. 1002 'Enlazar al puerto local con frmPeerB.Show 'Muestra el segundo formulario.
udpPeerA.SendData txtSend.Text End Sub Private udpPeerA_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub Para crear un segundo socio UDP, siga estos pasos: Agregar al proyecto Un formulario estándar.
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 de 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 'Énfasis: El valor de RemoteHost debe cambiarse por el nombre de la computadora. .RemoteHost= "PeerA" .RemotePort = 1002 'El puerto al que conectarse. .Bind 1001 'Enlazar al puerto local. End With End Sub Private Sub txtSend_Change() 'Enviar texto inmediatamente después de la entrada. GetData strData txtOutput.Text = strData End Sub Para probar el ejemplo anterior, ejecute el proyecto presionando la tecla F5 y luego escriba algo de texto en los cuadros de texto txtSend de ambos formularios. El texto escrito se mostrará en el cuadro de texto txtOutput de otro formulario. Acerca del método de vinculación En el código anterior, el método de vinculación se llama al crear la aplicación UDP, lo cual es necesario para "reservar" el puerto local para el control. Por ejemplo, si vincula un control al puerto 1001, otras aplicaciones no podrán "escuchar" en ese puerto. El segundo parámetro del método de vinculación 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 la 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.