La Web del Programador: Comunidad de Programadores
 
    Pregunta:  14516 - PROBLEMAS CON EL WINSOCK (4006)
Autor:  Fernando Diaz Sanchez
Buenas a Todos...

Soy principiante con el Winsock, y quisiera que me den una mano
ya que quiero hacer una especie de Winpopup primitivo, pero
a mi me sale un MALDITO error (4006)

Error \'4006\' en tiempo de ejecucion

Protocolo o estado de conexion erroneo pra la transaccion o peticion
solicitda

SI, ya se que esta pregunta ya la han hecho, pues la lei, era la numero
2729, pero no me funciono, me sigue saliendo ese error

No se que hacer, :(

este es el codigo que uso para el formulario Servidor
(ya que solo quiero probarlo en una maquina, nada mas...)

------------CODIGO DEL WINSOCK DE LA AYUDA DEL VB----------------
Private Sub Form_Load()
\' Establece la propiedad LocalPort en un entero.
\' Después invoca el 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 el estado del control es cerrado.
\' De lo contrario, cierra la conexión antes de
\' aceptar la nueva conexión.
If tcpServer.State <> sckClosed Then _
tcpServer.Close
\' Acepta la petición con el parámetro
\' requestID.
tcpServer.Accept requestID
End Sub

Private Sub txtSendData_Change()
\' El control TextBox llamado txtSendData
\' contiene los datos que se van a enviar. Siempre
\' que el usuario escribe en el cuadro de texto,
\' se envía la cadena mediante el método SendData.
tcpServer.SendData txtSendData.Text \'-> AQUI SALE EL ERROR
End Sub

Private Sub

  Respuesta:  Jcgarcia Zavala
Pues que no te cuenteen, la verdad yo vivi con ese problema mas de una semana hasta que pude resolverlo, el problema se origina por la velocidad de tu ordenador, ya que aun no se resuelve la conexion con el socket y el puerto del otro lado, cuando tu estas deseando enviar un paquete de informacion.
Tu codigo esta bien, el detalle es que cuanto envias no se puede enviar, y si checas el estado del socket aun no esta conectado porque aun noresuelve el elvio que deseas hacer.
Acontinuacion te anexo una funcion llamada pause, ya que con ello le das un poco de tiempo al ordenador de emplear la apertura del puerto y designar el random del socket y poder hacer la conexion y el envio de datos adecuado.
Suerte chico.!!!
Private Sub Pausa()
Dim Comenzar
Dim Controlar
Comenzar = Timer
Do Until Controlar >= Comenzar + 0.1
Controlar = Timer
DoEvents
Loop
End Sub
Pon este evento pausa una linea antes del sendData de envio de datos para que todo salga bien.
en pocas palabras quedaria asi.

Pausa
tcpserver.Senddata txtsendata.text

Suerte chavo.

  Respuesta:  SuNcO
Soy algo experto en WinSock =P y puedo ayudarte, solo falta ke pusieras el codigo de recibir para chekarlo, por lo pronto todo se ve bien

O puedes chekar este ejemplo de WinSock ke hize y ke ya tiene 48 visitas (apenas 1 semana) y ke nadie se a kejado de su funcionamiento

www.chakasteam.n3.net/winsock.html

Cualkier duda con gusto ahi esta mi mail