• Domingo 22 de Diciembre de 2024, 18:16

Autor Tema:  Re: ¿Donde esta el error?  (Leído 2865 veces)

Anna

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: ¿Donde esta el error?
« en: Sábado 5 de Abril de 2003, 19:32 »
0
Necesito ayuda urgente. ¿Alguien me puede explicar porque no funciona este cliente-servidor. Cada

vez que envio un mensaje de cliente a servidor me da error. Dice algo asi como "No es posible

enviarlo en el estado que está". Y si lo envia no aparece en el txtoutput del servidor

Y segunda pregunta: Para permitir más de una conexión, es decir, que se conecte más de un

cliente, ¿lo estoy haciendo bien, o necesito poner algo más?

Aqui está todo el código

CLIENTE


Private Sub cmdsalir_Click()
Unload Me
End Sub

Private Sub cmdConnect_Click()
If cliente.State <> sckClosed Then cliente.Close
'cliente.Close
cliente.RemoteHost = cliente.LocalIP
cliente.Connect , 40000
MsgBox "El cliente" + cliente.LocalIP + "Ha conectado con" + cliente.RemoteHost
cmdConnect.Enabled = False


End Sub
Private Sub cmdenviar_Click()
If TxtSend.Text <> "" Then
cliente.SendData TxtSend.Text
TxtSend.Text = ""
TxtSend.SetFocus
End If

End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
datos = TxtSend.Text
cliente.SendData enviar

Private Sub Form_Load()
'Text1.Text = Data1.Recordset("NICK")
Text2.Text = cliente.LocalIP
Text3.Text = Time
End Sub

///////////////////////////////////////////////////////////////////

SERVIDOR
Dim Estado As String * 1
Dim i As Long

Private Sub cmdescuchar_Click()
Estado = "I"
Form_Activate
MsgBox "El servidor " + servidor(0).LocalHostName + " a la escucha"
End Sub

Private Sub Form_Activate()
i = 0
Select Case Estado
Case "I":
If servidor(0).State <> sckClosed Then servidor(0).Close
servidor(0).Bind 40000
' servidor(0).LocalPort = 40000
servidor(0).Listen
Estado = "L"
'frmclient.Show
'frmlogin.Show
End Select
End Sub

Private Sub Form_Load()
Estado = "I"
Text1.Text = servidor(0).LocalIP
End Sub

Private Sub cmdenviar_Click()
Dim enviar As String
enviar = TxtOutput.Text
servidor(i).SendData TxtOutput.Text
End Sub

Private Sub servidor_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If servidor(i).State <> sckClosed Then servidor(i).Close
For i = 0 To 4
Load servidor(i)
servidor(i).LocalPort = 0
servidor(i).Accept requestID
' Load TxtSendData(i)
End If
Next
End Sub

Private Sub servidor_DataArrival_(ByVal bytesTotal As Long)
Dim datos As String
servidor(i).GetData datos, vbString, bytesTotal
TxtOutput.Text = datos
If TxtOutput.Text <> "" Then
MsgBox "Mensaje recibido del cliente" + servidor(i).RemoteHostIP
servidor(i).SendData ("Mensaje recibido")
TxtOutput.Text = datos
End Sub

///////////////////////////////////////////////////////////////////////////////

CONTRASEÑA

Private Sub cmdaceptar_Click()
If txtlogin.Text = "" Or txtpassword.Text = "" Then
MsgBox "Debe ingresar los datos"
End If
Data1.Recordset.MoveFirst
While Not Data1.Recordset.EOF
If txtlogin.Text = Data1.Recordset("NICK") Then
If txtpassword.Text = Data1.Recordset("PASSWORD") Then
frmclient.Show
frmclient.Caption = "Inciando sesion de: " & Data1.Recordset("NICK")
End If
End If
Data1.Recordset.MoveNext
Wend
MsgBox "No existe ninguna cuenta de usuario relacionada a esos datos, verifique sus datos."
txtlogin.Text = ""
txtpassword.Text = ""
txtlogin.SetFocus
End Sub

Private Sub cmdcancelar_Click()
Unload Me
End Sub

//////////////////////////////////////////////////////////////////////////////

Gracias por la ayuda
:hitcomp:

HurryCrack

  • Miembro MUY activo
  • ***
  • Mensajes: 206
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #1 en: Domingo 6 de Abril de 2003, 11:53 »
0
Hola anna, para empezar que es esto?
cliente.RemoteHost = cliente.LocalIP
si tienes esto como va a conectar el cliente con el servidor? debe ser:

if Cliente.State<>sckclosed then Cliente.Close

Cliente.Protocol=TcpProtocol
Cliente.Conect IP_server,Port_server

de forma que ya hemos conectado el cliente con el servidor.Fale?

En el WINSOCK_DATAARRIVAL
para que tienes el Cliente.SendData enviar??????????????'

el DATAARRIVAL lo que hace es recoger los datos que le envia el servidor¡¡¡¡¡¡¡¡¡

Cuando pulses sobre cmdescuchar no hagas un Form_Activate haz un
CALL Form_Activate

ademas el servidor(0).Bind cambialo por el servidor(0).Port, ademas el servidor(0) no debe recibir datos, ya que es el que esta a la escucha, de forma que los que deben recibir y/o enviar datos son del 1 hacia arriva, fale?

No se, deberias recoger un ejemplo cliente servidor que deje hace tiempo por el chat, cualquier cosa por aki estoy, fale?
un saludo
:hippi:

Anna

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
¿Donde esta el error?
« Respuesta #2 en: Domingo 6 de Abril de 2003, 13:40 »
0
Gracias por los consejos. Estoy bastante despistada. Se nota, ¿no?:hitcomp:

solcito

  • Miembro MUY activo
  • ***
  • Mensajes: 143
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #3 en: Jueves 30 de Diciembre de 2004, 16:47 »
0
a ver si me podeis ayudar a mi, estoy intentando hacer un chat, muy sencillito, pero no me funciona, no se conectan, y no entiendo donde esta el error.

Aca te paso el codigo:

CLIENTE

Private Sub Command1_Click()
Winsock1.Connect "Pc8Compaq", 1145
End Sub

Private Sub Command2_Click()
Winsock1.SendData txtSend.Text
End Sub

Private Sub Form_Load()
' El nombre del control Winsock es tcpClient.
' Nota: para especificar un host remoto, puede usar
' la dirección IP (como "121.111.1.1") o
' el nombre "descriptivo" del equipo, como se muestra aquí.
Winsock1.RemoteHost = "200.1.49.63"
Winsock1.RemotePort = 1145
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData strData
txtOutPut.Text = strData
End Sub

--------------------------------------------------------------------------

SERVIDOR

Private Sub Command1_Click()
Winsock1.SendData txtSendData.Text
End Sub

Private Sub Form_Load()
Winsock1.LocalPort = 0    'selecciona un puerto de forma aleatoria
Winsock1.Listen           'crea el socket y lo establece a modo de escucha
Me.Show
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
' Declara una variable para los datos entrantes.
' Invoca el método GetData y establece la propiedad
' Text de un control TextBox llamado txtOutput
' con los datos.
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub


Desde ya muchas Gracias!! :hola:
Everything that has a beginning has an end.....

martin campos quintero

  • Miembro MUY activo
  • ***
  • Mensajes: 113
  • Nacionalidad: 00
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #4 en: Viernes 31 de Diciembre de 2004, 00:49 »
0
Pues como crees que te va a funcionara, el error es sencillo, en el servidor tienes esto:

Winsock1.LocalPort = 0 'selecciona un puerto de forma aleatoria

o sea que se selecciona un puerto aleatorio, cosa que el cliente no sabrá que puerto eligió el servidor, y no conecta pk el puerto no es el mismo, supongamos que el servidor eligió el puerto 10000 y el cliente trata de conectar con el puerto 1145 (como lo tienes en el codigo del cliente) pues nunca podrá conectarse

sustituye la linea que puse arriba por esta linea:

Winsock1.LocalPort = 1145  y así el servidor estará esperando conexiones por el puerto 1145 que es el que usa el cliente

Espero te sirva, de cualquier modo probaré el código para ver que otro error puede tener  ;)

martin campos quintero

  • Miembro MUY activo
  • ***
  • Mensajes: 113
  • Nacionalidad: 00
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #5 en: Viernes 31 de Diciembre de 2004, 01:20 »
0
Aqui subo el código corregido bro

****PROGRAMA CLIENTE****

Private Sub Command1_Click()
  Winsock1.Connect "Pc8Compaq", 1145 'Se conecta al equipo llamado "Pc8Compaq" donde está el programa servidor por medio del puerto 1145 que es el que está escuchando el servidor
End Sub

Private Sub Command2_Click()
  Winsock1.SendData txtSend.Text
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strdata As String
  Winsock1.GetData strdata
  txtOutPut.Text = strdata
End Sub


****PROGRAMA SERVIDOR****

Private Sub Command1_Click()
  Winsock1.SendData txtSendData.Text 'Envía datos del "txtSendData" al cliente
End Sub

Private Sub Form_Load()
  Winsock1.LocalPort = 1145 'Establece que el socket esperará conexiones por el puerto 1145
  Winsock1.Listen 'Pone el socket a la espera de conexiones
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  If Winsock1.State <> sckClosed Then
    Winsock1.Close
    Winsock1.Accept requestID
  End If
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strdata As String
  Winsock1.GetData strdata 'Almacena los datos recibidos en la variable strdata
  txtOutPut.Text = strdata
End Sub

Listo, ese chat ya es funcional  ;)

Ya si quieres hacer que al servidor se le conecten varios clientes, nadamás dime y te paso el código, suerte  :P

fap1603

  • Miembro MUY activo
  • ***
  • Mensajes: 135
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #6 en: Viernes 31 de Diciembre de 2004, 05:13 »
0
Pues a mi si me interesa el chat con varios clientes, si pudieras pasarme el codigo, te lo agradeceria mucho, me ahorrarias mucho tiempo, yo tengo algo pensado como hacerlo, pero ahora mismo no me da mucho tiempo por mi trabajo, y necesito algo de esto de todas formas, mi correo es fap1603@hotmail.com.  Gracias.
Saludos,

Francisco Ayala Pinazo
Lima - Perú

martin campos quintero

  • Miembro MUY activo
  • ***
  • Mensajes: 113
  • Nacionalidad: 00
    • Ver Perfil
Re: ¿Donde esta el error?
« Respuesta #7 en: Viernes 31 de Diciembre de 2004, 06:54 »
0
Bueno FAP aquí subo el código, haciendo notar que en este los clientes solo pueden enviar mensajes al servidor y no a otros clientes, el servidor al enviar un mensaje lo envía a todos los clientes, esta característica la podrias usar para hacer una rutina que envíe un mensaje al servidor con la ip destino para poder enviar mensajes de cliente a cliente, o sea haciendo al servidor como si fuera un servidor de mensajes  :huh:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.