Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: jorgeluisgimenez en Enero 07, 2012, 01:33:42 pm
-
necesito ayuda, o una guía, les agradezco de antemano.
uso Visual Basic 6, con el control winsock
hice una aplicación cliente-servidor siguiendo uno de tantos ejemplos que hay dando vuelta por la web. es un chat sencillo, pero no funciona a través de internet.
son dos aplicaciones:
la primera es el servidor (que escucha un puerto que yo le indico en un text)
y la otra aplicación es el cliente (donde le indico la IP a la que tiene que comunicarse en un text, y el puerto al que tiene que comunicarse en otro text)
cuando lo pruebo en mi PC (abriendo las 2 aplicaciones al mismo tiempo) funciona perfecto, en la aplicacion cliente ingreso mi propio IP y un puerto cualquiera y la aplicacion servidor la dejo a la escucha de ese mismo puerto... y funciona perfecto. puedo chatear conmigo mismo
peeeero cuando lo pruebo en dos PC´s distintas no funciona.
(en una, un amigo mio usa la aplicacion cliente y en otra, yo uso la aplicacion servidor)
los programas no se comunican
que estoy haciendo mal???
la direccion de IP debe escribirse de alguna forma especial? debo usar algun puerto en especifico? ayudaaa por favor!!!
PD) la direccion IP que uso para probar el programa se la digo a mi amigo por telefono, en el momento, así que el problema no tiene nada que ver con que la IP sea fija o variable...
muchas gracias
-
¿los puertos que usas están abiertos en los Modems/Routers?
¿Las Ip's publicas son correctas (http://dyndns.checkip.org (http://dyndns.checkip.org))?
sin src no hay mucho con lo que se te pueda ayudar mas que revisar eso que te dije recien, podrías exponer algo del source que usas?
-
se me olvidaba: el IP de mi PC lo saco de la pagina:
http://whatismyipaddress.com/ (http://whatismyipaddress.com/)
Este es el codigo completo de la aplicacion Cliente:
Private Sub Command1_Click()
'enviamos el contenido de Text2
Winsock1.SendData Text2.Text & vbCrLf
'apuntamos al final del contenido del TextBox e
'insertamos los nuevos datos obtenidos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Cliente >" & Text2.Text & vbCrLf 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
'borramos Text2
Text2.Text = ""
End Sub
Private Sub Command2_Click()
'asignamos los datos de conexion
Winsock1.RemoteHost = Text3.Text
Winsock1.RemotePort = Text4.Text
'conectamos el socket
Winsock1.Close
Winsock1.Connect
End Sub
Private Sub Command3_Click()
'cierra la conexion
Winsock1.Close
'desplegamos un mensaje en la ventana
Text1.Text = Text1.Text & "*** Conexion cerrada por el usuario." & vbCrLf
'desplazamos el scroll
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_Close()
'cierra la conexion
Winsock1.Close
'desplegamos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Conexion cerrada por el servidor." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_Connect()
'desplegamos un mensaje en la ventana
Text1.Text = Text1.Text & "*** Conexion establecida." & vbCrLf
'desplazamos el scroll
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer As String 'variable para guardar los datos
'obtenemos los datos y los guardamos en una variable
Winsock1.GetData Buffer
'apuntamos al final del contenido del TextBox e
'insertamos los nuevos datos obtenidos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Servidor >" & Buffer 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
End Sub
Private Sub Winsock1_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)
'cerramos la conexion
Winsock1.Close
'mostramos informacion sobre el error
MsgBox "Error numero " & Number & ": " & Description, vbCritical
End Sub
y este es el codigo de la aplicacion servidor:
Private Sub Command1_Click()
'enviamos el contenido de Text2
Winsock1.SendData Text2.Text & vbCrLf
'apuntamos al final del contenido del TextBox e
'insertamos los nuevos datos obtenidos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Servidor >" & Text2.Text & vbCrLf 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
'borramos Text2
Text2.Text = ""
End Sub
Private Sub Command2_Click()
'cerramos cualquier conexion previa
Winsock1.Close
'asignamos el puerto local que abriremos
Winsock1.LocalPort = Text3.Text
'deja el socket esuchando conexiones
Winsock1.Listen
'desplegamos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Escuchando conexiones." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Command3_Click()
'cierra la conexion
Winsock1.Close
'desplegamos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Conexion cerrada por el usuario." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_Close()
'cierra la conexion
Winsock1.Close
'desplegamos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Conexion cerrada por el Cliente." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'mostramos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Peticion numero " & requestID & vbCrLf
Text1.SelStart = Len(Text1.Text)
'cerramos previamente el socket
Winsock1.Close
'aceptamos la conexion
Winsock1.Accept requestID
'desplegamos un mensaje en la ventana
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Conexion aceptada, listo para interactuar." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer As String 'variable para guardar los datos
'obtenemos los datos y los guardamos en una variable
Winsock1.GetData Buffer
'apuntamos al final del contenido del TextBox e
'insertamos los nuevos datos obtenidos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Cliente >" & Buffer 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
End Sub
Private Sub Winsock1_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)
'cerramos la conexion
Winsock1.Close
'mostramos informacion sobre el error
MsgBox "Error numero " & Number & ": " & Description, vbCritical
End Sub
Adjunto las imagenes de los forms.
(http://s13.postimage.org/pfs0nveyb/CLIENTE_SERVIDOR.jpg) (http://postimage.org/image/pfs0nveyb/)
(http://s10.postimage.org/vhwcbxr1h/CLIENTE_SERVIDOR.jpg) (http://postimage.org/image/vhwcbxr1h/)
-
El puerto que esa en Text4.Text, tenes que abrir en tu router, si pasas el modelo de tu router te puedo ayudar.
-
el modelo de router:
HUAWEI
model: EchoLife HG520c
name: Home Gateway
eso figura en la etiqueta de está atras del router.
podrías aclararme un poco como es eso de "abrir el puerto"? (o pasarme algún link con informacion)
¿para que sirve?
¿solo tiene que hacerlo el servidor?
¿o el cliente también?
me llama la atención que en ninguno de los tutoriales para hacer el chat, decía nada al respecto... siendo algo tan importante
muchas gracias
-
ahí muestra como abrir los puertos en tu Router
[youtube]http://www.youtube.com/watch?v=4vmBKPplOJQ[/youtube]
Link: http://www.youtube.com/watch?v=4vmBKPplOJQ