Winsock Ayuda plz!

Iniciado por n3ts4mura1, 26 Julio 2006, 07:11 AM

0 Miembros y 1 Visitante están viendo este tema.

n3ts4mura1

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 =)..

whiskises

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

n3ts4mura1

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.


_Sergi_

#3
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
Proyecto de Ingeniero

n3ts4mura1

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

#5
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.
el tiempo pondrá a cada uno en su lugar

n3ts4mura1


n3ts4mura1

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.

n3ts4mura1

.....::::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  ;)
el tiempo pondrá a cada uno en su lugar