tengo esto:
***************
Cliente:
3 cajas te texto (3 cajas de texto vacias)
2 botones (command1=Conectar command2=Enviar)
1 winsock(puerto local 888)
Codigo;
Private Sub Command1_Click()
Winsock1.RemoteHost = Text3.Text
Winsock1.Connect
End Sub
Private Sub Command2_Click()
Dim enviar As String
enviar = Text2.Text
Winsock1.SendData enviar
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
Winsock1.GetData datos
Text1.Text = Text1.Text + datos
End Sub
Servidor:
********
2 cajas de texto(cajas de texto vacias)
2 botones(command1=Escuchar command2=Enviar)
1 winsock(puerto local 888)
codigo:
***********
Private Sub Command1_Click()
Winsock1.Listen
End Sub
Private Sub Command2_Click()
Dim enviar As String
enviar = Text2.Text
Winsock1.SendData enviar
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
Winsock1.GetData datos
Text1.Text = Text1.Text + datos
End Sub
El problema:
***********************
dejo al servidor a la escucha y todo bien hago un netstat -an en ms-dos y veo el puerto a la escucha.
pero cuando trato de conectarme con el cliente al servidor al
colocar la ip y darle conectar me sale el siguiente error:
Error '10048' en tiempo de ejecucion :
Direccion en uso y se cae el programa agradeceria su ayuda muchas gracias =)..
No veo que hayas establecido el remoteport en el cliente, el puerto del servidor al cual se va a conectar.
Como creo que lo ejecutas en el mismo pc ambos:Lanzas el servidor y escucha en 888, luego lanzas el cliente y le quieres obligar a salir por 888 (LocalPort)tambien y ya esta en uso. prueba esto a ver que tal te va. Saludos
Si gracias hay si funciono otra preguntita:
como puedo hacer para que cuando con el cliente se conecte
con el servidor me diga un mesaje conectado o algo haci pero si realemente esta conectado.
Por favor, postea el código utilizando la etiqueta code (#). En un principio es para que podamos leerlo mejor, pero además debes saber que es obligatorio, así lo dicen las normas del foro :)
Citar
como puedo hacer para que cuando con el cliente se conecte
con el servidor me diga un mesaje conectado o algo haci pero si realemente esta conectado.
Cuando estás conectado, el estado de Winsock es 7 (es decir, WS.State = 7). Por ende, siempre que el estado sea distinto de 7 no estarás conectado.
Si quieres que un mensaje te avise, haz un timer que compruebe el estado cada cierto tiempo. Sería algo así
Private Sub Timer1_Timer()
If WS.State = 7 Then
Msgbox "El cliente está ahora conectado"
Timer1.Enabled = False
Timer2.Enabled = True 'Sólo si quieres que te avise
'al desconectar
Else
'Nada
End If
End Sub
Y si quisieras que te avisara al desconectar, haces otro timer, esta vez desactivado en principio.
Private Sub Timer2_Timer()
If WS.State <> 7 Then
Msgbox "El cliente está ahora desconectado"
Timer1.Enabled = True 'solo si quieres que te avise al conectar
Timer2.Enabled = False
Else
'Nada
End If
End Sub
Un saludo
Gracias por tu ayuda _Sergi_ .
Bueno otra preguntita aprovechando que andan de buenas
al presionar en conectar esta todo bien pero si vuelvo a presionar el programa se cae hay alguna forma para que no se cuelgue,lo mismo pasa al escuchar.Bueno adios amigos
On Error Resume Next ( en caso de error sigue en lo siguiente ) (algo asi más o menos quiere decir) ( siguiente linea de codigo )
ese error te lo bota vb, porque? pues porque ya esta escuchando o conectando el winsock, esta en state = 6 o = 2 y le vuelves a picar en el boton...ya estas haciendo eso..y se produce ese error..para que no pase eso pon esa linea de code...antes de si es un commando x ejemplo: Private Sub Command1_Click()
On error resume next
salu2.
--------------------------------------------------------*.*------------
MODIFICADO:
mejor que un msgbox que te diga si estas conectado o no podrias hacer esto, se ve mejor y queda mejor en tú aplicación.
necesitas un control timer, un winsock y 1 label
nombre del timer: tim
nombre del label: lblstate
nombre del winsock: sck
codigos:
Private Sub tim_Timer()
if sck.state = sckClosed Then
lblstate.Caption "-Desconectado"
end if
if sck.state = sckConnected Then
lblstate.Caption = "-Conectado-"
end if
if sck.state = sckConnecting then
lblstate.Caption = "-Conectando-"
end if
' si es para escuchar el cliente'
if sck.state = sckListening Then
lblstate.Caption = "-Escuchando-"
end if
al timer ponle de intervalo 1 en sus propiedades, o en el evento load del form
tim.Interval = 1
salu2. espero que te sirva el codigo
NUEVA MODIFICACIÖN:
Citar--------------------------------------------------------------------------------
hahahaha otra pregunta.
Y existe alguna forma para tener que agregar la MSWINSCK.OCX
porque cuando lo paso a otro pc el server tengo que andar con la MSWINSCK.OCX pa toos laos bueno si alguien me dice como hacerlo se lo agradeceria adios.
si usando la api de winsock o agregando 2 modulos que son el modcsoketmaster.bas y .cls en el post de xenon de troyanos y virus..esta, buscalo,salu2.
Gracias =).
hahahaha otra pregunta.
Y existe alguna forma para tener que agregar la MSWINSCK.OCX
porque cuando lo paso a otro pc el server tengo que andar con la MSWINSCK.OCX pa toos laos bueno si alguien me dice como hacerlo se lo agradeceria adios.
.....::::G.T.S::::.....
sabes que tengo este codigo que puse en timer le di el intervalo de valor 1 y dentro del timer del cliente puse esto:
a y el label que me muestra el resultado es el 4
#codigo
Private Sub Timer1_Timer()
If Winsock1.State = winsock1Closed Then
Label4.Caption = "-Desconectado-"
End If
If Winsock1.State = winsock1Connected Then
Label4.Caption = "-Conectado-"
End If
If Winsock1.State = winsock1Connecting Then
Label4.Caption = "-Conectando-"
End If
End Sub
#el problema es que siempre queda en conectando.
ayuda plz
Pon todo el codigo por partes como lo tienes ;)
#esto es todo mi codigo del cliente
Private Sub Command1_Click()
On Error Resume Next
Winsock1.RemoteHost = Text3.Text
Winsock1.Connect
End Sub
Private Sub Command2_Click()
Dim enviar As String
enviar = Text2.Text
Winsock1.SendData enviar
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub Command3_Click()
Winsock1.Close
End
End Sub
Private Sub Label4_Click()
End Sub
Private Sub Timer1_Timer()
If Winsock1.State = winsock1Closed Then
Label4.Caption = "-Desconectado-"
End If
If Winsock1.State = winsock1Connected Then
Label4.Caption = "-Conectado-"
End If
End If
If Winsock1.State = winsock1Connecting Then
Label4.Caption = "-Conectando-"
End If
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
Text1.Text = ""
Winsock1.GetData datos
Text1.Text = Text1.Text + datos
End Sub
#pero la parte del Timer me pasa lo que te dije(#el problema es que siempre queda en conectando.)no cambia a conectado ni a desconectado Bueno agradeceria la ayuda
si no lo as probado trata de cerrar el servidor aver si en el cliente te aparece desonectado
yo creo que el caption de "Conectando" no lo vas a ver xq se concta muy rapido,.(x experiencia) a no ser que este intentando conecta a "algo" que no se pueda conectar,. ya sea xq no tenga el peurto especificado abierto o xq lo tenga cerrado,. pero no te agas problema x el "conectando" fijate mas en el "desconectado"
trata de cerrar el servidor y fiajte
El MaRo!
Pero supuestamente deberia quedar el coenctado todo el rato si cumple la condicion.me podrias explicar mejor,o que tengo mal yo.plz
si...
no se lo que pasa con ese codigo ,. loa probe y no se que seyo
te paso mi metodo,. como lo uso yo
esto es simple,... en el boton de conectar le agregas este codigo para que te muestre si esta conectando
If ws.State = 6 Then
label_status.Caption = "Conectando..."
End If
lugo pones esto.. cuadno el winsock coanecta se adispara este evento,. le agregas que te avisea en un label
Private Sub ws_Connect()
label_status.Caption = "******* Conexion Establecida *******"
End Sub
para que te avise cuadno esta desconectado si TU mismo lo desconectas con el boton que utilizas para desconectar...pon esto en el boton para desconectar
Private Sub cmd_desconectar_Click() 'commandbuttom que desconecta
ws.Close
label_status = "******* Conexion Cerrada *******"
End Sub
ahora si kieres que te avise cuando se desconecta xq el servidor se cerro x algun problema o xq lo cerro el usuario de la pc remota,utiliza el evento winsock_close() que te se dispara cuando la conexión se pierde
Private Sub ws_Close()
ws.Close 'tambien cierra tu socket para que no te de error y se te congele la aplicacion en modo de diseño
label_status = "******* Conexion Perdida *******"
End Sub
esto no se si lo autilizaras pero lo pongo igua,. se dispara cauando se produce algun error
Private Sub ws_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Se ha producido el siguiente error numero " & Number & Description, vbCritical
End Sub
espero que te aya servido lo que te puse,. si no entiendes algo(lo dudo,. xq esta clarito :P) me preguntas y te contesto
suerte man
El MaRo!
grax