Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

UDP - ayuda pro favor!!!

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: UDP - ayuda pro favor!!! Responder citando

Estoy con problemas con el NMUDP, y ha tiempo no lo consigo resolver ...

Tento enviar datos de la estacion 1 a la estacion 2.
A la estacion 1, lo hice uno "for" onde envio uno buffer (char[1500]) por SendBuffer.
A la estacion 2, en lo componente NMUDP, hay lo ReadBuffer para receber los datos.

LO PROBLEMA ES que solo 5 o 6 datagramas llegam a la estacion 2 !!! Yo ha posto uno sniffer a estacion 1, y los datos san enviados realmente; pero "se pierden" sin llegar a estacion 2... Eso ocorre mismo que sean ambos en la misma ordenadora (enviando para loopback, o 127.0.0.1).

Alguien ha visto algo parecido ? Estoy con serios problemas por causa de esto...

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

La implementacion : si tivera dos componentes TNMUDP, uno TButton y uno TMemo:

------------------------
Global

char buffer_r[1500]; // recepcion
int lidos;

------------------------
En [Button1]

char buffer_e[1500];

// aca va lo preenchimiento, yo tengo
// normalmente 50-60 kbytes por vez para
//enviar


NMUDP1->RemoteHost = 127.0.0.1;
NMUDP1->RemotePort = 1000;
NMUDP2->LocalPort = 1000;
for (int x=0; x = 30; x++)
NMUDP1->SendBuffer(buffer_e, 1500, 1500);

------------------------
En [NMUDP2DataReceived]

NMUDP2->ReadBuffer(buffer_r, 1500, lidos);
Memo1->Lines->Add(buffer_r);


Estoy volvendo loco, cualquer ayuda es bienvinda...
Gracias!

Volver arriba
Mensaje    Asunto: Responder citando

lo estas probando en forma local o remota?

es decir, si tienes dos pc's conectalas directamente. Eso te va a dar constancia de que el entorno esta bien.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Samuel,

Como conocedor, mi consejo es ....

1) con sistema UDP, crear un protocolo de comunicacion,
donde haya preguntas y respuestas

2) Conexión TCp/IP


Te aconsejo esta ultima opción cuando necesites seguridad en las
comunicaciones.
_________________
Saludos
~~~~~~~~
Wink _Willa
~~~~~~~~
www.avancegame.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

TCP te da confiabilidad de que los aquetes lleguen ya que establece un sistema de acuses de recibo, pero en una red local con tráfico normal, UDP debería andar perfectamente sin que se pierda ningún paquete.

Este, evidentemente, no el caso de internet
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Mira, puede que todo este bien, pero creo se te esta pasando algo, casi todo lo que tienes que enviar, es manejado como una Cadena de Caracteres, si estas enviado informacion de este o cual quier otro tipo asegurate de ponerle, al final de la cadena la terminacion NULL, para que no pierdas tus mensajes...
te pongo un codigo que yo utilizo sin ningun problema...

al recibir los datos en un equipo
Código:

void __fastcall TDataModule1::NMUDP1DataReceived(TComponent *Sender,
      int NumberBytes, AnsiString FromIP, int Port)
{
    char Buff[40];
    int j;
    NMUDP1->ReadBuffer(Buff, 40, j);
    Buff[j]=0;  // para leer bien los datos

/*  // para refrescar datos en red
    if(!strcmpi(DivideCadena(Buff,";")->Strings[0].c_str(),"F")){  // F para indicar actualizaion
        for (int i = DataModule1->Database1->DataSetCount - 1; i >= 0; i--){
            DataModule1->Database1->DataSets[i]->Refresh();
        }
    }*/
}



cuando envias los datos, pues eso no es problema, esta funcion la declaras donde te sirva y ya puedes enviar datos desde cual quier parte
Código:

void __fastcall SendMsg(TNMUDP *CeC,    // NMUDP para tratar los msgs
                            AnsiString Cadena, //el mensaje con el nombre del equipo
                            AnsiString Equipo){ // al tipo de equipo, (E)stacion (S)servidor

    if(Equipo.IsEmpty()){
        CeC->RemoteHost="192.168.0.1";// servidor que comparte internet
    }else{
        CeC->RemoteHost=Equipo;// nombre del equipo.

    }
    CeC->SendBuffer(Cadena.c_str(),Cadena.Length(),Cadena.Length());
}

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Una duada con UDP Responder citando

Hola a todos. soy el ultimo en llegar a la lista.

He creado un programita tipo chat, como el que comentabais.

En una red Local va genial. Peroooo lo he probado via internet y no va.
ni recibe el otro ordenador ni yo.

Yo tengo un Router, he direccionado el puerto 1000 y 1001 a la ip local de mi ordenador. en UDP.
Con eso deberia funcionar. no ? pos se niega.

Otra cosa, si en dicho programa quisiera enviar un archivo, qué seria mejor usar otro componente UDP?
He visto los SendStream aunque no se como se usa.


Bueno muchas gracias, por este estupendo foro.
_________________
== No !! al fin de c++ Buider. ==
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

recuerda que el servidor (la pc a la cual te conectas) debe tener una ip pública. De otro modo no será visible.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Envio de datos Responder citando

No soy un experto en esto, pero UDP significa exactamente User Defined Protocol, por lo cual el componente NMUDP solo provee un medio para la conexion y no verifica el correcto envio y recepcion de los paquetes como si lo hace TCP/IP.

Para que lo veas de otra manera, con este componente la pc que envia simplemente pone el paquete en la red y se desentiende de el a menos que tu codigo prevea esta situacion.

Necesitas desarrollar al menos un protocolo minimo de comunicacion para tener algun grado de fiabilidad, algo asi como:

Pc1: "Pc2 estas ahi?"
Pc1: "Pc2 estas ahi?"

Pc2: "Aqui Pc2 Atenta"
Pc1: "Te Envio 10 paquetes"
Pc2: "Lista para recibir"
Pc1: "Paquete 1/10"
Pc2: "Recibido 1/10"
Pc1: "Paquete 2/10"
.........
Pc2: "No Entendi Repite 2/10"
Pc1: "Paquete 2/10"
Pc2: "Recibido 2/10"

Etc...

Para esto debes aprovechar los eventos del componente OnDataReceived, OnDataSend, OnBufferInvalid, OnStreamInvalid

Recuerda que en la pc que envia puedes tener un bucle mandando paquetes a una velocidad mayor de lo que la otra los puede recibir, es decir que las pcs no trabajan de manera sincronizada sino asincrona.

Respecto a la conexion con "vista a fuera" es decir internet, necesitas desarrollar ademas de el/los programa(s) de enviar y recibir otro con el proposito de servir de puente en la barrera entre Internet e Intranet, este programa seria un servidor corriendo en las maquinas que tengan "vista" a la red de redes, un ejemplo similar son los programas para compartir el acceso a internet, puedes tener una red local con una pc que disponga de internet, pero si no esta corriendo un programa de compartir no hay manera, solo navegaras desde esa maquina.

De todas formas aclaro que asi es como me parece a mi, si estoy equivocado en algo por favor me corrijanme, pues asi vamos todos aprendiendo Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Chat Responder citando

Muchas gracias.

Es muy ilustrativo tu texto, he aprendido bastante. Como no tenia claro como hacerlo, he visto el ejemplo de c++ Builder que hay sobre Chat y me ha gustado mucho.

Es con Socket de cliente y servidor. Lo he visto muy seguro. Y voy a probara crear uno parecido.

Al menos para aprender.

Quiero crear un chat así para mi trabajo, y poder enviarle un fichero a la otra persona. Y sobre todo, poder tener a varias personas conectadas.
Y lo más importane, que el chat atienda a sentencias SQL mirando a la base de datos de mi programa. Idea

Que te parece ? es muy ambicioso ?

Un saludo.
_________________
== No !! al fin de c++ Buider. ==
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.