• Martes 14 de Mayo de 2024, 11:08

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - witchyfairy

Páginas: [1]
1
C++ Builder / Ya lo resolvi
« en: Domingo 26 de Julio de 2009, 23:27 »
Lo que hize fue declara mi variable en el form1, como variable global la utilizo y todo y en el form 2 como variable global le pongo :

extern <tipo de dato> <nombre de variable>
y asi me lo hace no se que error haya tenido anteriormente gracias a todos y disculpen si esta pregunta era muy facil para ustedes  B)

2
C/C++ / Re: Puedo enviar struct por medio de sockets?
« en: Domingo 26 de Julio de 2009, 21:41 »
Hola amiguito Idol  :lol:  muchas gracias por contestar mira lo que quiero pasarle a mi socket es lo siguiente

Código: C++
  1. vector <typedef struct nodo> listas;
  2. .
  3. .
  4. .
  5. .
  6. listas.push_back();
  7.         if (existe == 1)
  8.         {
  9.         ShowMessage("EXISTE Y LA CONTRASEÑA ES CORRECTA");
  10.         listas.back().User = usua;
  11.         listas.back().Nick = usua;
  12.         listas.back().Idioma = idi;
  13.         listas.back().Port =portclient;
  14.         listas.back().Hilo = lect_con;
  15.         listas.back().DireccionCliente = DireccionLocal;
  16.         listas.back().SockConexion = RemoteSocket;
  17.        //es una lista que esta contenida en un vector segun yo lo intente hacer asi pero me marca error :S se que estoy haciendo algo mal perono se que ...
  18.         for(int con =0; con<= listas.size(); con++){
  19.         send(RemoteSocket,(vector <typedef struct nodo> *)&listas.at(con),listas.size());
  20.         }
  21.  
  22.  
  23.  
Ojala puedas ayudarme, por cierto muchas gracias por contestar todas mis dudas te estas ganando que te escriba un agradecimiento especial en mi trabajo final de la escuela, je je je me has ayudado mas que mis asesores  :good:

3
C/C++ / Puedo enviar struct por medio de sockets?
« en: Domingo 26 de Julio de 2009, 19:07 »
Hola he estado viendo que en los recv y send de los sockets en windows puedes enviar y recibir solo datos tipo char pero yo necesito pasar de el servidor a el cliente estructuras y no se como hacerlo me pueden ayudar cone so por fa  :beer:

4
C++ Builder / Problema pasar variables d eun form a otro
« en: Viernes 24 de Julio de 2009, 21:59 »
Hola ya se que hay  temas con este titulo ya los lei y todos dicen que ponga asi las variables en mi archivo .h de mi form:

Código: C++
  1. class TForm2 : public TForm
  2. {
  3. __published:    // IDE-managed Components
  4.         TEdit *Edit1;
  5.         TButton *Button1;
  6.         void __fastcall Button1Click(TObject *Sender);
  7. private:    // User declarations
  8. public:     // User declarations
  9.              //aqui ponemnos las variables globales
  10.         __fastcall TForm2(TComponent* Owner);
  11. };
  12.  

Y sta bien ya  lo use y fui feliz la cosa es que solo me sirvio para datos tipo AnsiString y para int pero no me funciona para Sockets (ya intente pasar el socket como int pero me dice en mi programa que no esta definida)  y variables string alguien sbe porque no se puede? alguna otra solucion
Nota tambien probe extern pero esa me hace lo mismo solo para int y ansistring  :wub:
S

5
C++ Builder / Re: Datos de un form a otro
« en: Viernes 24 de Julio de 2009, 18:37 »
Tengo la misma duda que el compañero forista la cosa es que yo necesito declarar otro tipo de varialble como estructuras y enteros y al quere hacerlo me da un error ya que solo me deja declarar AnsiString otro metodo para hacer lo mismo??? Ayuda por favor!!!

6
C++ Builder / Resuelto
« en: Viernes 24 de Julio de 2009, 02:24 »
Tengo entendido que si logras resolver tu problema solito y nadie mas te ayudo tienes que cerrar el hilo y esto es loq ue vengo a hacer...el error estaba al declarar un String en la estructura no se puede y solo cambie el String por char y se soluciono todo
Gracias

7
C/C++ / Re: Logica de un programa
« en: Viernes 24 de Julio de 2009, 02:02 »
Hola!! Gracias por contestar, Eternal cuando dices que los clientes se comuniquen entre si quieres decir que se cree un nuevo socket para cada cliente (o sea crear un bind, listen, connect ) aqui esta el codigo!! BUeno esta es la parte del servidor:

Código: C++
  1. void AceptoConexiones(SOCKET Socket)
  2. {
  3.   SOCKET SockConexion;
  4.   SOCKADDR_IN DireccionLocal;
  5.   struct IP nuevaIP;
  6.   int tamano = sizeof(DireccionLocal),crear,no_cliente=0;
  7.   while(1){
  8.         no_cliente++;
  9.         SockConexion = accept (Socket, (struct sockaddr*)&DireccionLocal,&tamano);
  10.         mnsj =  mnsj + " nConexion entrante desde:n" + (String)inet_ntoa(DireccionLocal.sin_addr) + (String)(DireccionLocal.sin_port);
  11.         nuevaIP.IPDireccion = DireccionLocal;
  12.         nuevaIP.IPPuerto = DireccionLocal.sin_port;
  13.         nuevaIP.IPSocket = SockConexion;
  14.         nuevaIP.cliente = no_cliente;
  15.         lect_con = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)Hilo_del_cliente,(void *)&nuevaIP,0,&Thread_lect);
  16.          }
  17.  
  18. }
  19. //----------------------------------------------------------------------------
  20. void *Hilo_del_cliente(void *nuevaIP){
  21.  
  22.      struct IP *nueva = (struct IP*)nuevaIP;
  23.      SOCKET RemoteSocket = nueva->IPSocket;
  24.      unsigned short portclient = nueva->IPPuerto;
  25.      SOCKADDR_IN DireccionLocal = nueva->IPDireccion;
  26.      String Usuario;
  27.      ShowMessage("Entre al hilo que atiende al cada cliente");
  28.      char buffer[1000],use[1000],usua[300],cont[300],idio[300],esta[300];
  29.      int nBytesSent;
  30.      int nBytesRecv;
  31.      int opcion,idi,est,existe;
  32.      struct nodo *nuev =NULL;
  33.      struct nodo *L;
  34.      ZeroMemory(buffer,1000);
  35.  
  36.        nBytesRecv = recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  37.         mnsj =  mnsj + " nConexion entrante desde:n" + (String)inet_ntoa(DireccionLocal.sin_addr) + (String)portclient;
  38.         mnsj =  mnsj + "t recibi Opcion: " + buffer;
  39.         opcion = atoi(buffer);
  40.         //aqui el codigo del logeo ya lo hace  y todo esta bien
  41.         //me falta poner el del registro
  42.         switch(opcion)
  43.         {
  44.         case 1:
  45.         //lo de mensaje de usuario y todo eso solo lo puse para ver si llegaban los datos
  46.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  47.         mnsj =  mnsj + "t recibi Usuario: " + buffer;
  48.         strcpy(usua,buffer);
  49.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  50.         mnsj =  mnsj + "t recibi Pasword: " + buffer;
  51.         strcpy(cont,buffer);
  52.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  53.         mnsj =  mnsj + "t recibi Nick: " + buffer;
  54.         strcpy(idio,buffer);
  55.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  56.         mnsj =  mnsj + "t recibi Idioma: " + buffer;
  57.         strcpy(esta,buffer);
  58.         existe = validacion(usua,cont,idio,esta);
  59.         idi = atoi(idio);
  60.         est = atoi(esta);
  61.  
  62.         if (existe == 1)
  63.         {
  64.         ShowMessage("EXISTE Y LA CONTRASEÑA ES CORRECTA");
  65.         nuev = crea_nod(usua,usua,idi,est,portclient,lect_con,DireccionLocal,RemoteSocket);
  66.         //aqui es donde le mando la lista a el cliente pero se me bloquea y ninca llega, alguna idea de como mandar la lista de los contactos???
  67.         strcpy(buffer,"SI");
  68.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  69.         }
  70.         else
  71.         {
  72.         ShowMessage("NO EXISTE FAVOR DE VERIFICAR LOS DATOS");
  73.   //aqui cuando le envio a el cliente el mensaje de que elcliente no esta logeado correctamente me manda un error o bien me manda numeros NO la cadena de caracteres que quiero
  74.         strcpy(buffer,"NO");
  75.         recv (RemoteSocket,(char *)&buffer, sizeof (buffer), 0);
  76.         }
  77.         break;
  78.  
  79.         case 2:
  80.         //registro
  81.         char nomb[60],appa[60],apma[60],ciud[60],pais[60],usua[60],cont[60],preg[60],resp[60],idio[60],diac[60],mesc[60],anioc[60],sexx[60],queryc[100];
  82.         int anac,mnac,dnac;
  83.         mnsj = "Estoy en la opcion2";
  84.         //aqui va el codigo del registro
  85.          break;
  86.  
  87.  
  88.          default:
  89.          ShowMessage("NO HAY NINGUNA OPCION");
  90.          }
  91.  
  92.  
  93. }
  94.  

Código: C++
  1. struct nodo *crea_nod(char *e_mail,char *Nick,int idioma,int status,unsigned short port,HANDLE hilo,SOCKADDR_IN DireccionCliente,SOCKET SockConexion){
  2.      struct nodo *nuevo;
  3.      nuevo = (struct nodo *)malloc(sizeof(struct nodo));
  4.      nuevo->User = e_mail;
  5.      nuevo->Nick = Nick;
  6.      nuevo->Idioma = idioma;
  7.      nuevo->Estado = status;
  8.      nuevo->Port = port;
  9.      nuevo->Hilo = hilo;
  10.      nuevo->DireccionCliente = DireccionCliente;
  11.      nuevo->SockConexion = SockConexion;
  12.      nuevo->sig =  NULL;
  13.   return nuevo;
  14. }
  15.  

Aqui funciona bien pero no entiendo como cada cliente se comunicara con otros clientes aqui esta el codigo del cliente:


Código: C++
  1. void __fastcall TForm1::BitBtn3Click(TObject *Sender)
  2. {
  3. if(Edit2->Text == "" || Edit3->Text == "" || ComboBox1->Text == "" || ComboBox2->Text == "")  {ShowMessage("Ingresa los datos completos");}
  4. else {
  5.   alias = Edit2->Text;
  6.   pass = Edit3->Text;
  7.   idioma = ComboBox1->Text;
  8.   if (idioma == "ESPAÑOL") {  idi = "1";  }
  9.   else if (idioma == "INGLES"){  idi = "2";  }
  10.   else  {   idi = "3";  }
  11.   estado = ComboBox2->Text;
  12.   if (estado == "CONECTADO") {  edo = "1";  }
  13.   else if (estado == "NO CONECTADO"){  edo = "2";  }
  14.   else  if (estado == "NO DISPONIBLE"){   edo = "3";  }
  15.   else{    edo = "4";  }
  16.   strcpy(aliasc,alias.c_str());
  17.   strcpy(passc,pass.c_str());
  18.   strcpy(idic,idi.c_str());
  19.   strcpy(edoc,edo.c_str());
  20.   //debo de mandar los datos anteriores para que el servidor me logee correctamente
  21.  strcpy(use,"1");
  22.  send(Sock_ser,(char*)&use,sizeof(use),0);
  23.  strcpy(use,aliasc);
  24.  mnsj = mnsj + "/n USUARIO" + (String)use;
  25.  send(Sock_ser,(char*)&use,sizeof(use),0);
  26.  strcpy(use,passc);
  27.  mnsj = mnsj + "/n PASS" + (String)use;
  28.  send(Sock_ser,(char*)&use,sizeof(use),0);
  29.  strcpy(use,idic);
  30.  mnsj = mnsj + "/n IDIOMA" + (String)use;
  31.  send(Sock_ser,(char*)&use,sizeof(use),0);
  32.  strcpy(use,edoc);
  33.  mnsj = mnsj + "/n ESTADO" + (String)use;
  34.  send(Sock_ser,(char*)&use,sizeof(use),0);
  35.  //aqui se me bloquea y no me llega nada :S
  36.  ShowMessage("Espero respuesta"); //Deberia de enviar el NO o bien SI para ver si esta logeada pero no lo hace en us lugar me envia numeros
  37.  recv(Sock_ser,(char*)&use,sizeof(use),0);
  38.  ShowMessage("Me enviaron algo" + (String)use );
  39.  
  40.  if (use == "SI")
  41.  {
  42.   ///se añade a la lsita de usuarios, PERO NO LOGRO PASARLA, en todo caso si se puede pasar aqui volveria a crear el procedimiento de el bind, listen y accept para cada cliente con el qu entable comunicacion????
  43.  }
  44.  else
  45.  {
  46.  
  47.  }
  48.  
  49.  }
  50. }
  51.  

BUeno quedo de ustedes muchas gracias!!!

8
C/C++ / Logica de un programa
« en: Jueves 23 de Julio de 2009, 01:42 »
Hola chic@s quiero hacer una aplicacion con hilos y sockets en c++ pero no tengo muchas ideas que digamos ya !!!! Espero puedan ayudarme...
Se supone que el servidor estara corriendo en una maquina cuando un cliente se conecta le manda un hilo a cada cliente donde lo autentifica o lo registra y despues le manda una lista con los contactos que estan conectados.
Hasta aqui todo va bien y ya esta hecho pero ahora quiero que de esa lista el usuario decida con quien hablar y la comunicacion sea cliente- cliente y se olviden dle servidor :D como puedo lograr eso??? ALguien podria orientarme o darme una idea??
Gracias  :wub:

9
C++ Builder / Otro problema con estructuras
« en: Martes 21 de Julio de 2009, 16:13 »
Hola a todos oigan tengoun problema con estructuras  :angry:  ojala puedan ayudarme  :mellow:

Esta es mi declaracion de la estructura
Código: C++
  1. struct nodo{
  2.         String User;
  3.         String Nick;
  4.         int Idioma;
  5.         int Estado;
  6.         unsigned short Port;
  7.         HANDLE Hilo;
  8.         SOCKADDR_IN DireccionCliente;
  9.         SOCKET SockConexion;
  10.         struct nodo *sig;
  11.         }nodo;
  12.  

Esta es mi declaracion de la funcion que utiliza la estructura anterior
Código: C++
  1. struct nodo *crea_nod(String e_mail,String Nick,int idioma, int status, unsigned short port,HANDLE hilo,SOCKADDR_IN DireccionCliente,SOCKET SockConexion);
  2.  

Esta es la funcion del nodo
Código: C++
  1. struct nodo *crea_nod(String e_mail,String Nick,int idioma,int status,unsigned short port,HANDLE hilo,SOCKADDR_IN DireccionCliente,SOCKET SockConexion){
  2.      struct nodo *nuevo;
  3.      nuevo = (struct nodo *)malloc(sizeof(struct nodo));
  4.      nuevo->User = e_mail;
  5.      nuevo->Nick = Nick;
  6.      nuevo->Idioma = idioma;
  7.      nuevo->Estado = status;
  8.      nuevo->Port = port;
  9.      nuevo->Hilo = hilo;
  10.      nuevo->DireccionCliente = DireccionCliente;
  11.      nuevo->SockConexion = SockConexion;
  12.      nuevo->sig =  NULL;
  13.   return nuevo;
  14. }
  15.  

Y por ultimo aqui creo la llamada a la funcion de la estructura
Código: C++
  1. ....
  2.    struct nodo *nuev =NULL;
  3.      struct nodo *aux;
  4.    aux = crea_nod(AnsiString(usua),AnsiString(usua),idi,est,portclient,lect_con,DireccionLocal,RemoteSocket);
  5. ......
  6.  

Es en esta ultima es donde me da un error de memoria
Project C:...................exe faulted with message "access violation at 0x400068aa  read of adrress 0X93845542
lo corri paso por paso  y no se porque podrian ayudarme??? Gracias

10
C++ Builder / Problemas con logica de enviar y recibir
« en: Domingo 19 de Julio de 2009, 21:12 »
Hola amigos como dije antes estoy haciendo una aplicacion del tipo messenger en C`++  y utilizo la Api miren ya estoy bloqueada y no razono bien  :ouch:  la cosa es la siguiente: tengo mi servidor donde se haran todas las consultas de los clientes en ella ya pude hacer que escuchara y cuando alguien se conectara le asigna un nuevo hilo para que lo atienda y vuelve a la escucha, cuando el cliente entra al nuevo hilo puede hacer diferentes cosas: logearse, registrarse, traer lista de usuarios, mandar o recibir un archivo, cambiar de estado y salir., pero no entiendo como el servidor atendera las peticiones del cliente ypara usar recv y send  se utilizan diferentes buffers para cada accion del messenger???., proque ademas como que se bloquea cuando quiero hacer dos cosas a la vez.
La solucion seria hacer un hilo diferente par aque te logees para que te registres para tu lista de usuarios etc???  o que otra solucion ven ustedes :wub:

11
C/C++ / Re: Hilos en C++ Borland con APi
« en: Domingo 19 de Julio de 2009, 20:09 »
Wow eres mi idolo :D  :rolleyes:  muchas muchas gracias!!! Ya lo hize y no hubo problema, quiza para ti fue un problema tonto pero a mi no me dejaba avanzar estare pro aqui dando mucha mas lata porque todavia no entiendo como hacer este messenger :D

12
C/C++ / Re: Hilos en C++ Borland con APi
« en: Domingo 19 de Julio de 2009, 20:02 »
Código: C++
  1. struct IP{
  2.         in_addr IPDireccion;
  3.         unsigned short IPPuerto;
  4.         SOCKET IPSocket;
  5.         }IP;
  6.  
  7. void AcceptoConexiones(SOCKET Socket)
  8.   SOCKET SockConexion;
  9.   struct IP nuevaIP;
  10.   int tamano = sizeof(DireccionLocal),crear;
  11.   while(1){
  12.         SockConexion = accept (Socket, (struct sockaddr*)&DireccionLocal,&tamano);
  13.         mnsj =  mnsj + " nConexion entrante desde:n" + (String)inet_ntoa(DireccionLocal.sin_addr) + (String)(DireccionLocal.sin_port);
  14.         nuevaIP.IPDireccion = DireccionLocal.sin_addr; //aqui lleno los datos de mi estructura IP
  15.         nuevaIP.IPPuerto = DireccionLocal.sin_port;
  16.         nuevaIP.IPSocket = SockConexion;
  17.         lect_con = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)Hilo_del_cliente,(void *)&nuevaIP,0,&Thread_lect);//aqui ya hize el cast de estructura a void
  18.          }
  19.  
  20. }
  21. //----------------------------------------------------------------------------
  22. void *Hilo_del_cliente(void *nuevaIP){ //aqui recibo mi estructura como void
  23.  
  24.      struct IP *nueva = (IP*)nuevaIP;  //aqui me da error  (E2188:Error syntax)
  25.      ShowMessage("Entre al hilo que atiende al cada cliente");
  26.      SOCKET RemoteSocket = ((IP*)nuevaIP)->IPSocket; //Y cuando intento entrar a los datos de la estructura tambien me da error (E2188:Error syntax)
  27.      unsigned short portclient = ((*IP)nuevaIP)->IPPuerto;  
  28.  
Espero me entiendas, y muchas gracias por responderme  :beer:

13
C/C++ / Re: Hilos en C++ Borland con APi
« en: Domingo 19 de Julio de 2009, 19:19 »
Cita de: "Eternal Idol"
El casting esta mal, en realidad no hay casting nueva_IP ya es un void *.

Mejor asi:
Código: C++
  1. DWORD WINAPI Hilo_del_cliente(LPVOID lpParameter)
  2. {
  3.   IP *nueva_IP = (IP*)lpParameter;
  4.  

La cosa es que cuando pongo :

Código: C++
  1.  void *Hilo_del_cliente(void *nueva_IP){
  2.  
  3.      struct IP *nuevo = (IP*)nueva_IP;
  4.  
[/quote]

me sale un error de sintaxis y no me deja avanzar!!!

14
C/C++ / Hilos en C++ Borland con APi
« en: Domingo 19 de Julio de 2009, 18:26 »
Hola estoy haciendo un programa tipo messenger en c++ borland pero me lo pidieron con la api en donde a cada cliente le asigno un hilo le paso una estructura de la siguietne manera:
struct IP nueva_IP;
lect_con = CreateThread(NULL, 0,(LPTHREAD_START_ROUTINE)Hilo_del_cliente,(void *) &nuevaIP,0,&Thread_lect);

en la funcion del hilo hago esto:

void *Hilo_del_cliente(void *nueva_IP){
    //este es el cast
     void *estructura=(void*)nueva_IP;

La cosa es que necesito usar los datos de la estructura pero no se como acceder a los datos de esta alguien podria ayudarme pro favor  :wub:

Nota: Disculpen si mi post esta mal pero es la primera vez que uso un foro y no he leido bien las reglas proque me interesabamas exponer mi problema pero ahora voy a leer gracias

Páginas: [1]