Control Winsock
Publicado por Carlos (1 intervención) el 07/11/2007 11:11:35
Hola, tengo un problema con un programa cliente/servidor que estoy haciendo, sacado de un tutorial. El programa sirve para mandar mensajes entre ordenadores conectados en red. (un pequeño chat) pero que no me funciona, el error que me da es el siguiente:
Error: 40006 en tiempo de ejecución.
"Protocolo o estado de conexión erroneo para la transacción o petición solicitada"
El servidor parece que funciona bien, porque le doy a "escuchar" y veo que me abre el puerto especificado (888) en modo escucha "listening".
En cuanto al cliente, le pulso en conectar, para que se conecte al servidor y parece que no hace nada, (lo miro con el comando "netstat" de MS-DOS, y no veo que se conecte a ningún puerto remoto). Y luego cuando pulso para enviar mensaje, me sale el error que os he puesto arriba.
El código del CLIENTE es:
Private Sub Form_Load()
Winsock1.LocalPort = "888" ' Establecemos el valor del puerto local para la conexión
End Sub
'CONECTANDONOS AL SERVIDOR
Private Sub CommandConectar_Click()
Winsock1.RemoteHost = Text2.Text ' Establecemos el Ordenador Remoto
Winsock1.Connect 'Realizamos la conexión
End Sub
'RECIBIENDO DATOS
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Datos As String
Winsock1.GetData Datos
TextRecibir.Text = TextRecibir.Text + Datos
End Sub
' ENVIANDO DATOS
Private Sub CommandEnviar_Click()
Dim envio As String
envio = TextEnviar.Text
Winsock1.SendData envio
TextEnviar.Text = ""
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
==================================================================
El código del SERVIDOR es:
Private Sub Form_Load()
Winsock1.LocalPort = "888" ' Establecemos el puerto local para la conexión
End Sub
'NOS PREPARAMOS PARA ACEPTAR CONEXIONES REMOTAS
Private Sub CommandEscuchar_Click()
Winsock1.Listen ' Ponemos la conexión a la escucha.
End Sub
'PREPARAMOS LA CONEXIÓN PARA QUE CAPTURE DATOS ENTRANTES
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Datos As String
Winsock1.GetData Datos ' Al llegar algún datos lo meterá en la variable Datos
TextRecibir.Text = TextRecibir.Text + Datos ' Metemos los datos en la caja de texto Mensaje
End Sub
'ACEPTAMOS LAS PETICIONES DE CONEXIÓN
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID 'Aceptamos las peticiones de conexión que lleguen
End Sub
Private Sub CommandEnviar_Click()
Dim Envio As String
Envio = TextEnviar.Text
Winsock1.SendData Envio ' Enviamos el texto del mensaje
TextEnviar.Text = "" ' Limpiamos el cuadro de texto
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
Error: 40006 en tiempo de ejecución.
"Protocolo o estado de conexión erroneo para la transacción o petición solicitada"
El servidor parece que funciona bien, porque le doy a "escuchar" y veo que me abre el puerto especificado (888) en modo escucha "listening".
En cuanto al cliente, le pulso en conectar, para que se conecte al servidor y parece que no hace nada, (lo miro con el comando "netstat" de MS-DOS, y no veo que se conecte a ningún puerto remoto). Y luego cuando pulso para enviar mensaje, me sale el error que os he puesto arriba.
El código del CLIENTE es:
Private Sub Form_Load()
Winsock1.LocalPort = "888" ' Establecemos el valor del puerto local para la conexión
End Sub
'CONECTANDONOS AL SERVIDOR
Private Sub CommandConectar_Click()
Winsock1.RemoteHost = Text2.Text ' Establecemos el Ordenador Remoto
Winsock1.Connect 'Realizamos la conexión
End Sub
'RECIBIENDO DATOS
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Datos As String
Winsock1.GetData Datos
TextRecibir.Text = TextRecibir.Text + Datos
End Sub
' ENVIANDO DATOS
Private Sub CommandEnviar_Click()
Dim envio As String
envio = TextEnviar.Text
Winsock1.SendData envio
TextEnviar.Text = ""
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
==================================================================
El código del SERVIDOR es:
Private Sub Form_Load()
Winsock1.LocalPort = "888" ' Establecemos el puerto local para la conexión
End Sub
'NOS PREPARAMOS PARA ACEPTAR CONEXIONES REMOTAS
Private Sub CommandEscuchar_Click()
Winsock1.Listen ' Ponemos la conexión a la escucha.
End Sub
'PREPARAMOS LA CONEXIÓN PARA QUE CAPTURE DATOS ENTRANTES
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Datos As String
Winsock1.GetData Datos ' Al llegar algún datos lo meterá en la variable Datos
TextRecibir.Text = TextRecibir.Text + Datos ' Metemos los datos en la caja de texto Mensaje
End Sub
'ACEPTAMOS LAS PETICIONES DE CONEXIÓN
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID 'Aceptamos las peticiones de conexión que lleguen
End Sub
Private Sub CommandEnviar_Click()
Dim Envio As String
Envio = TextEnviar.Text
Winsock1.SendData Envio ' Enviamos el texto del mensaje
TextEnviar.Text = "" ' Limpiamos el cuadro de texto
End Sub
Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub
Valora esta pregunta


0