Red de conocimiento informático - Problemas con los teléfonos móviles - No se puede conectar cuando se usa el control remoto vb

No se puede conectar cuando se usa el control remoto vb

Este es el artículo original de MSDN donde comencé a aprender Winsock

Usando el control Winsock

Usando el control WinSock, puedes establecer una conexión con una computadora remota y controlarla a través del Protocolo de datagramas de usuario. (UDP) o Protocolo de transporte (TCP) para intercambiar datos. 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 recopile información del usuario y envíe la información recopilada a un servidor central.

Cree una aplicación de servidor que actúe como receptor de datos de múltiples usuarios.

Crear una aplicación de "chat".

Elija 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 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 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 específica del protocolo suele depender de la aplicación que se desea crear. Las siguientes preguntas le ayudarán 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 adecuado para enviar pequeñas cantidades de datos.

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

Determine el nombre de la computadora

Cuando se conecta a una computadora remota , necesitas saber su dirección IP o el nombre de la computadora "bonita". Una dirección IP es una secuencia de tres números separados por puntos (por ejemplo, xxx.xxx.xxx.xxx). A menudo, lo más fácil de recordar es el "nombre que suena" de una 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 que se encuentra arriba se puede usar como valor de la propiedad RemoteHost.

Conexión TCP preliminar

Si la aplicación utilizará el protocolo TCP, primero debe determinar si la aplicación es un servidor o un cliente. Para crear un lado del servidor, la aplicación necesita "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 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 Listen.

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 lt;gt;sckClosed Entonces _

tcpServer.Close

'Aceptar con el parámetro requestID

' conectar.

tcpServer.Accept requestID

End Sub

Private Sub txtSendData_Change()

'El control TextBox se llama txtSendData

' contiene los datos a enviar.

tcpServer.SendData txtSendData.Text

End Sub

Sub privado 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 Text del TextBox denominada txtOutput

'.

Atenuar strData como cadena

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.

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.

Aspectos destacados El valor de la propiedad RemoteHost debe cambiarse por el nombre de la computadora.

Private Sub Form_Load()

'El nombre del control Winsock es tcpClient.

'Nota: Para especificar el host remoto, puede usar

' Una dirección IP (por ejemplo, "121.111.1.1"), o puede usar

' Un "bonito nombre" para la computadora, como se muestra a continuación.

tcpClient.RemoteHost = "RemoteComputerName"

tcpClient.RemotePort = 1001

End Sub

Sub privado cmdConnect_Click()

'Llame al método Connect para inicializar la conexión.

tcpClient.Connect

End Sub

Sub privado txtSendData_Change()

tcpClient.SendData txtSend.Text

End Sub

Sub privado tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData txtSend. Texto

End Sub

Private Sub sckServer_ConnectionRequest _

(Índice como entero, ByVal requestID como largo)

Si índice = 0, entonces

intMax = intMax 1

Cargar sckServer(intMax)

sckServer(intMax).LocalPort = 0

sckServer(intMax). Aceptar requestID

Cargar txtData(intMax)

Finalizar si

End Sub

Prefacio UDP

Crear UDP Las aplicaciones son más sencillas 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 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. 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 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 el protocolo a UDPProtocol. 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

Con udpPeerA

'Énfasis: Debes agregar RemoteHost El valor

se cambia al nombre de la computadora.

.RemoteHost="PeerB"

.RemotePort = 1001 'Número de puerto al que conectarse.

.Bind 1002 'Para enlazar al puerto local.

Termina con

frmPeerB.Show 'Muestra el segundo formulario.

End Sub

Private Sub txtSend_Change()

'Envía texto inmediatamente después de escribirlo. GetData strData

txtOutput.Text = strData

End Sub

Para crear un segundo socio UDP, siga estos pasos:

Agregue el siguiente 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: Debes cambiar el valor de RemoteHost 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

Sub privado udpPeerB_DataArrival _

(ByVal BytesTotal As Long)

Atenuar strData como cadena

udpPeerB.GetData strData

txtOutput.Text = strData